Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> keyPressed & keyReleased 
:(
    Опции темы
Majesty
Дата 14.7.2008, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



Нужно сделать следующее: при нажатии на стрелку "вправо" шарик на экране едет вправо, при отпускании стрелки - останавливается. Пытался сделать так:
Код
   public void keyPressed(int keyCode) {
      if(pos_x < (width-ball_w) && keyCode == getKeyCode(Canvas.RIGHT)) {
         StartRun("right");
      }

      if(pos_x > 0 && keyCode == getKeyCode(Canvas.LEFT)) {
         StartRun("left");
      }  
   }

   public void keyReleased(int keyCode) {
      isRunning = false;
   }

   public void StartRun(String direction) {
      isRunning = true;
      while(isRunning) {
         if(direction == "left") {
            pos_x-=speed;
         }
         else {
            pos_x+=speed;
         }
         repaint();
         serviceRepaints();
         try {
            parent.thread.sleep(10);
         }
         catch(Exception e) {
         }
      }
   }
И естественно, шарик не останавливается при отпускании стрелки (т.к. методы keyPressed && keyReleased блокирующие и дожидаются завершения друг-друга, отрисовки и т.п.)... А как сделать правильно? smile 

Это сообщение отредактировал(а) Majesty - 14.7.2008, 13:10
PM MAIL WWW   Вверх
W0LF
Дата 14.7.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



создать отдельный поток


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
W0LF
Дата 14.7.2008, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Код

public class aaa {
    boolean running = false;
    boolean stopping = false;
    String[] directions = {"left", "right"};
    String currentDirection;
    static final Object objectMonitor = new Object(); 
    Thread t = new Thread() {
        public void run() {
            while(!stopping) {
                synchronized (objectMonitor) {
                    while (!running) {
                        try {
                            objectMonitor.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();  
                        }
                    }
                    if(currentDirection == directions[0]) {

                    }
                    else {

                    }
                    repaint();
                    serviceRepaints();
                    try {
                        Thread.sleep(10);
                    }
                    catch(Exception e) {
                    }
                }
            }
        }
    };
    public void keyPressed(int keyCode) {
        running = false;
        synchronized (objectMonitor) {
          if(pos_x < (width-ball_w) && keyCode == getKeyCode(Canvas.RIGHT)) {
                currentDirection = directions[1];                
          }
          if(pos_x > 0 && keyCode == getKeyCode(Canvas.LEFT)) {
                currentDirection = directions[0];

          }
           running = true;                
           objectMonitor.notify();
        }
    }
    public void keyReleased(int keyCode) {
        running = false;
    }


}

Попробуй так, правда переделать надо будет, ибо keyPressed - главный поток, если дето в потоке t забочинится что-то - будет висеть приложение.
Теперь пара советов - строки сравнивай через equals и в подобный случаях желательно юзат GameCanvas.
Ах, да, еще надо t.start() сделать


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Majesty
Дата 14.7.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



Эхх... Так и знал, что придётся в поток это дело выбрасывать :( Спасибо! А за советы - отдельное спасибо smile smile 
PM MAIL WWW   Вверх
Majesty
Дата 15.7.2008, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



Так, всё прекрасно получилось smile А можно как-нибудь сделать, чтобы телефон не издавал звуков при нажатии кнопки? Получается зажимаешь стрелку, а он попискивает, пока шарик катится. Так мало того, ещё и притормаживает в момент писка smile 
PM MAIL WWW   Вверх
Samuil
Дата 17.7.2008, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Majesty, поставь режим без звука smile


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
Majesty
Дата 18.7.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



Ето как ето? smile
PM MAIL WWW   Вверх
eugine_s
Дата 18.7.2008, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Цитата(Majesty @  15.7.2008,  06:39 Найти цитируемый пост)
Так, всё прекрасно получилось smile А можно как-нибудь сделать, чтобы телефон не издавал звуков при нажатии кнопки? Получается зажимаешь стрелку, а он попискивает, пока шарик катится. Так мало того, ещё и притормаживает в момент писка smile  


Звук от нажатия кнопки телефона издает не Java-мидлет, а ОС телефона. Поэтому отключается звук в настройках телефона.

Например в SE W810i вот так это делается: Menu - Settings - Sounds & alerts - Key sound - Silent
PM MAIL   Вверх
Majesty
Дата 18.7.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



Ну блин, а как игрушки делают? smile Там же не пищить! smile 
PM MAIL WWW   Вверх
eugine_s
Дата 18.7.2008, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Цитата(Majesty @  18.7.2008,  15:04 Найти цитируемый пост)
Ну блин, а как игрушки делают? smile Там же не пищить! smile  


Прочитай еще раз: 

Цитата(eugine_s @  18.7.2008,  14:00 Найти цитируемый пост)
Звук от нажатия кнопки телефона издает не Java-мидлет, а ОС телефона. 


Или ты сам звук воспроизводишь при нажатии на кнопку? Нет - тогда не думай об этом и отключай системные звуки.

PM MAIL   Вверх
Majesty
Дата 21.7.2008, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



Ну из мидлета же я звуки не отключу smile 
Как сделать, чтобы в моей игре перемещения персонажа не озвучивались? smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0818 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.