Пятница, 22 Ноября 2024, 03:10

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Помогите сделать управление в игре под Андроид
JuwellДата: Воскресенье, 15 Июля 2012, 16:10 | Сообщение # 1
участник
Сейчас нет на сайте
Помогите сделать управление в игре под Андроид!
У меня есть две кнопки - вправо и влево) Я писал код в прошлых темах, но ответы не помогли sad
Напишите пожалуйста код чтобы при нажатии на кнопки спрайт двигался влево и вправо
СПАСИБО ЗАРАНЕЕ happy
PesetsДата: Понедельник, 16 Июля 2012, 11:49 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
У нас было 2 кнопки, 75 таблеток мескалина, 5 упаковок кислоты, пол-солонки кокаина и целое множество транквилизаторов всех сортов и расцветок, а так же текила, ром, ящик пива, пинта чистого эфира, и амилнитрит... ну и так далее.

Вот. Во-первых, на чем пишешь. Это критично.
Во-вторых, что за спрайт и на какие кнопки надо реагировать - реальные или виртуальные.
И в-третьих, очень бы не помешал хотя бы кусочек кода, который есть. Сразу было бы понятнее.



JerichoДата: Понедельник, 16 Июля 2012, 12:38 | Сообщение # 3
Ubuntu 11.10 user
Сейчас нет на сайте
Pesets, Что бы понят на чем пишет ТС много ума не надо (смотрим на раздел в котором тема).

Уютненькая страничка Ерихона

xxx: Так вы представляете, у него там фрагмент кода в 15 строк повторяется 37 раз. Если вынести в функцию можно сэкономить полтыщи строк!
yyy: это припев.
© Антон Антоненко
PesetsДата: Понедельник, 16 Июля 2012, 15:30 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
Quote (Jericho)
Pesets, Что бы понят на чем пишет ТС много ума не надо (смотрим на раздел в котором тема).

И на чем же? Java? Java - понятие растяжимое.
Меня интересует фреймворк / движок. Ну или если пишется на голом Android API, то нужно смотреть большую часть исходников.



JuwellДата: Понедельник, 16 Июля 2012, 15:33 | Сообщение # 5
участник
Сейчас нет на сайте
Пишу под Андроид!
Кнопки виртуальные(я их вывожу на канаву)
Вот мой код
Code
    public boolean onTouchEvent(MotionEvent event){
       if(event.getAction()==MotionEvent.ACTION_DOWN || event.getAction()==MotionEvent.ACTION_MOVE){   
          if(event.getX() == arrow_leftX){
           gameLoopThread.setRunning(false);
          }
          else if(event.getX() == arrow_leftX){
           playerX = playerX - xSpeed;
          }
          else if(event.getX() == arrow_rightX){
           gameLoopThread.setRunning(false);
          }
          else if(event.getX() == arrow_rightX){
           playerX = playerX + xSpeed;
          }
       }
    return super.onTouchEvent(event);
          }

При нажатии на левую кнопку playerX = playerX - xSpeed
При нажатии на правую кнопку playerX = playerX + xSpeed

Вся проблема в том что мой код не работает sad

Добавлено (16.07.2012, 15:33)
---------------------------------------------
Вот весь класс


Сообщение отредактировал Juwell - Понедельник, 16 Июля 2012, 15:34
PesetsДата: Понедельник, 16 Июля 2012, 15:38 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
Вот, уже понятнее.
Во-первых, у тебя игрок двигается только когда пришло сообщение. По-хорошему, нужно просто выставлять флаг (в духе player.setSpeed(xSpeed)), а двигать его в другом потоке уже.
Во-вторых, не может быть, код не работает. Хоть как-то он должен работать.
1. Посмотри, у тебя вообще onTouchEvent вызывается?
2. Посмотри, проходит ли у тебя первый if
3. Посмотри, что тебе возвращает getX() и сравни с arrow_leftx и arrow_rightx



JuwellДата: Понедельник, 16 Июля 2012, 15:38 | Сообщение # 7
участник
Сейчас нет на сайте
Сейчас попробую изменить

Сообщение отредактировал Juwell - Понедельник, 16 Июля 2012, 15:41
PesetsДата: Понедельник, 16 Июля 2012, 15:43 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Алсо,
Code
event.getAction().equals(MotionEvent.ACTION_DOWN)
А не == попробуй

Добавлено (16.07.2012, 15:43)
---------------------------------------------
И я так понимаю где getX() ==, там тоже равенство фтопку, надо либо эпсилон-равенство, либо вообще "getX() > чего-то && getX() < чего-то"



JuwellДата: Понедельник, 16 Июля 2012, 15:45 | Сообщение # 9
участник
Сейчас нет на сайте
Code
public boolean onTouchEvent(MotionEvent event){
      if(event.getAction()==MotionEvent.ACTION_DOWN || event.getAction()==MotionEvent.ACTION_MOVE){  
         if(event.getX() == arrow_leftX){
          gameLoopThread.setRunning(false);
         }
         else{
          playerX = playerX - xSpeed;
         }
      }
   return super.onTouchEvent(event);
     }

Вот такой работает но двигает только влево
а если дописать
Code
if(event.getX() == arrow_rightX){
          gameLoopThread.setRunning(false);
         }
         else{
          playerX = playerX + xSpeed;
         }
то перестает работать sad
PesetsДата: Понедельник, 16 Июля 2012, 15:52 | Сообщение # 10
постоянный участник
Сейчас нет на сайте
Я бы вообще написал так:
Code
public boolean onTouchEvent(MotionEvent event){  
       player.setSpeed(0);
       if(event.getAction()==MotionEvent.ACTION_DOWN || event.getAction()==MotionEvent.ACTION_MOVE){   
          if(event.getX() >= arrow_leftX && event.getX() <= arrow_leftX + arrow_width){  
           player.setSpeed(-xSpeed);
          }  
          elseif(event.getX() >= arrow_rightX && event.getX() <= arrow_rightX + arrow_width){  
           player.setSpeed(xSpeed);
          }  
       }  
    return super.onTouchEvent(event);  
      }


Где arrow_width - некая константа, скажем 100, а у player'а есть поле float speed, с геттером и сеттером.

А в игровом цикле я бы уже мерил прошедшее время и двигал игрока на player.getSpeed() * deltaTime единиц



JuwellДата: Понедельник, 16 Июля 2012, 16:04 | Сообщение # 11
участник
Сейчас нет на сайте
РАБОТАЕТ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!
Code
    public boolean onTouchEvent(MotionEvent event){   
         if(event.getAction()==MotionEvent.ACTION_DOWN || event.getAction()==MotionEvent.ACTION_MOVE){    
            if(event.getX() >= arrow_leftX && event.getX() <= arrow_leftX + arrow_width){   
             playerX = playerX - xSpeed;
            }   
            else if(event.getX() >= arrow_rightX && event.getX() <= arrow_rightX + arrow_width){   
             playerX = playerX + xSpeed;
            }   
         }   
      return super.onTouchEvent(event);   
        }
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг