| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > UP with LEFT |
| Автор: Rusico 26.8.2004, 17:14 |
| Здравствуйте, даже не знаю с чего начать. Вопрос наверное глупый, однака где искал ненашёл. Хочу чтоб моё приложение реагировало на события от клавы, что прекрасно работает, но ещё больше мне хочется чтоб оно реагировало на нажатие комбинаций клавиш, таких как UP одновременно с LEFT или RIGHT. Может кто сталкивался с похожей проблемой? HELP! ШПАШИБО. |
| Автор: Domestic Cat 26.8.2004, 17:23 | ||
Вот все что пришло в голову:
По идее, должен быть способ попроще? |
| Автор: Rusico 26.8.2004, 17:26 |
| ЩА попробую, спасибо. |
| Автор: Rusico 26.8.2004, 17:48 |
| К сожалению не работает, если я конечно всё правильно сделал. |
| Автор: Domestic Cat 26.8.2004, 17:54 |
| ? Код работает, в примере нужно фокус кнопке отдать (нажать на нее), тогда кей листенер заработает. |
| Автор: Rusico 26.8.2004, 18:01 |
| Щаз объясню: я пытаюсь написать маленькую програмку на java 3D, там кубик летает в 3-х мерном пространстве, а управляю я им по средствам клавиатуры, класс, который осуществляет его навигацию обрабатывает событие немного по другому: import java.awt.*; import java.awt.event.*; import java.net.*; import java.util.BitSet; import java.util.*; import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.image.*; import com.sun.j3d.utils.universe.*; import com.sun.j3d.loaders.objectfile.ObjectFile; import com.sun.j3d.loaders.Scene; public class Navigator extends Behavior { private WakeupCondition wupcon; private TransformGroup transform; public Navigator(TransformGroup tr) { transform = tr; WakeupOnAWTEvent wupevent = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED); WakeupCriterion[] wupcrit = {wupevent}; wupcon = new WakeupOr(wupcrit); } public void initialize() { wakeupOn(wupcon); } public void processStimulus(Enumeration detected) { while(detected.hasMoreElements()) { WakeupCriterion wupcrit = (WakeupCriterion)detected.nextElement(); if(wupcrit instanceof WakeupOnAWTEvent) { WakeupOnAWTEvent awtevent = (WakeupOnAWTEvent)wupcrit; AWTEvent[] events = awtevent.getAWTEvent(); moveShape(events); } } wakeupOn(wupcon); } public void moveShape(AWTEvent[] events) { boolean isForvPressed = false; boolean isPrevPressed = false; boolean isLeftPressed = false; boolean isRighPressed = false; boolean isUpPressed = false; boolean isDownPressed = false; for(int x=0;x<events.length;x++) { if(events[x] instanceof KeyEvent) { KeyEvent keyevent = (KeyEvent)events[x]; int keyCode = keyevent.getKeyCode(); if(keyevent.getID() == KeyEvent.KEY_PRESSED) { Transform3D trans = new Transform3D(); transform.getTransform(trans); Vector3f trVector = new Vector3f(); trans.get(trVector); if(keyCode == KeyEvent.VK_LEFT){isLeftPressed = true;} if(keyCode == KeyEvent.VK_UP){isForvPressed = true;} if(isLeftPressed && isForvPressed){System.out.println("YES");} } if(keyevent.getID() == KeyEvent.KEY_RELEASED) { if(keyCode == KeyEvent.VK_LEFT){isLeftPressed = false;} if(keyCode == KeyEvent.VK_UP){isForvPressed = false;} } } } } } } } |
| Автор: Domestic Cat 26.8.2004, 18:03 |
| Тут не сработает; нужно помещать этот код в keyPressed, keyReleased. |
| Автор: Rusico 26.8.2004, 18:07 |
| Ладно, всё равно спасибо |