Суббота, 23.11.2024, 04:08
Приветствую Вас Гость

Разработка игр c использованием JPCT

Каталог статей

Главная » Статьи » Разработка игр » JPCT

9. Пользовательский интерфейс: Чекбокс (GUICheckBox)
    Статья небольшая. Реализация класса GUICheckBox похожа на реализацию кнопки единственная разницей является то, что у чекбокса всего два состояния "выбран" или "не выбран", а так же то что необходимо обеспечить эффект залипания  состояния чтобы при зажатой кнопки мыши не происходило очень быстрая смена состояния выбора.
    Вот код реализации:
Код

import com.threed.jpct.FrameBuffer;
import com.threed.jpct.Texture;
import gram.engine.InputMap;
import gram.engine.Timer;

/**
  *
  * @author Ruslan Nevedomy
  */
public class GUICheckBox extends GUIElement{
   
  Texture checked;
  Texture unchecked;
  Timer sens;
   
  boolean isChecked;
   
  public GUICheckBox(int x,int y,int heigth,int width){
      super(x,y,heigth,width);  
      setVisible(true);
      sens = new Timer(500);
  }  
   
  public boolean getChecked() {
     return isChecked;
  }

  public void setChecked(boolean isChecked) {
     this.isChecked = isChecked;
     this.sens.start();
  }  
   
  /**
  * установка текстур для чекбокса
  * если в качестве параметра передать null то он не будет установлен
  * @param checked текстура для состояния "выбран"  
  * @param unchecked текстура для состояния "не выбран"  
  */
  public void setTextures(Texture checked,Texture unchecked)
  {
     if (checked!=null)
     {
         this.checked = checked;
     }
     if (unchecked!=null)
     {
         this.unchecked = unchecked;
     }
  }  

  @Override
  public void evaluteInput(InputMap inputMap) {
    if(getVisible())
    {
    int xpos = inputMap.mouse_x;
    int ypos = inputMap.mouse_y;

    if((xpos>=x)&&(xpos<=x+width)&&(ypos>=y)&&(ypos<=y+heigth))
    {  
     if (inputMap.mouse_leftbutton_down)
     {  
       if (sens.getElapsedTicks()>0)
       {
        Action();  
       }
     }
    }  
   }
  }

  @Override
  public void Action() {
    setChecked(!isChecked);
  }

  @Override
  public void Draw(FrameBuffer buffer) {
    if (getVisible())
    {
    int parent_x=0;
    int parent_y=0;

     //получение координат родительского элемента
     if (getParent()!=null)
     {
     parent_x=getParent().x;
     parent_y=getParent().y;
    }  
  //отрисовка
    if (isChecked)
    {
     buffer.blit(checked, parent_x+0, parent_y+0, x, y, width, heigth, true);
    }
    else
    {
      buffer.blit(unchecked, parent_x+0, parent_y+0, x, y, width, heigth, true);  
    }  
   }
  }  
}

    Как видно код достаточно прост, эффект залипания реализуется при помощи таймера. В данной реализации я не стал вносить в конструктор обязательными параметрами текстуры т.к. подумал, что кто то захочет не парится с загрузкой текстур, а создаст их в конструкторе на примере того как создается текстура в классе GUIBorder
    Это все в данной статье.
Категория: JPCT | Добавил: Gram01 (08.10.2013) | Автор: Gram01 W
Просмотров: 669 | Теги: пользовательский интерфейс, пользовательский элемент, GUI jpct, checkbox+jpct, jpct | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Категории раздела
JPCT [11]
Раздел о разработке игр на устройства работающие не под управлением Android'а
Сеть [2]
Раздел по вопросам касающимся сетевого взаимодействия приложений на java в контексте разработки игр
Контент [0]
Статьи о работе к контентом при разработки игр
Скрипты [2]
использование скриптов в игровом движке
Разное [1]
различные материалы о разработке игрового движка
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Copyright Неведомый Р.А. © 2024 | Рейтинг@Mail.ru