Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > JAVA Micro Edition

JAVA Micro Edition Низкоуровневое программирование мобильных телефонов.

Ответ
 
Опции темы
Старый 21.10.2011, 01:44   #1
Aarrgghh
AnyKey`щик
 
Регистрация: 03.10.2011
Сообщений: 9
Написано 0 полезных сообщений
(для 0 пользователей)
Проблема с Thread

При написании своей первой игры на J2ME (2D платфомера), столкнулся вот с такой вот проблемой:

При нажатии кнопки Вверх на клавиатуре персонаж должен прыгать... Ну он прыгает... Но при втором нажатии кнопки - прыгать он уже отказывется и игра зависает..
Код прыжка у меня осуществляется при запуске треда в отдельном классе.. Получается тогда так что при первом прыжке был запущен тред, но при нажатии на кнопку прыжка второй раз метод снова пытается запустить тред (который уже ясно что он не был остановлен по какой то причине)..

Приведу полный листинг класса, где осуществляется прыжок:
import javax.microedition.lcdui.game.Sprite;

public class 
JumpThread implements Runnable {
    public static final 
int DELAY 10// задержка
    
private boolean isJumpB false;
    private 
Thread thread = new Thread(this);
    private 
GCanvas gCanvas;          // холст для отрисовки 
    
private Sprite sprite;                  // спрайт, который должен прыгать
    
private int isJumping;
    private 
int noJump GCanvas.JUMP_VALUE
    
    public 
JumpThread(GCanvas gCanvasSprite sprite) {
        
this.gCanvas gCanvas;
        
isJumping noJump;
        
this.sprite sprite;
    }
    
    
/**
     * Прыгнуть...
     */ 
    
public void jumping() {
        if (
isJumping == noJump) {
            
isJumpB true;
            
thread.start();
            
isJumping++;
            
System.out.println("Вызван jumping...");
        }
    }

    private 
void stop() {
        
isJumpB false;
        
//thread.interrupt();
    
}
    
    public 
void run() {
        
System.out.println("Нить прыжка запущена...");
        while (
isJumpB) {
            
// если не равно, то прыгаем
            
if (isJumping != noJump) {
                
isJumping++;
                if (
isJumping 0) {
                    
// Персонаж движется вверх..
                    
sprite.setRefPixelPosition(sprite.getRefPixelX(), sprite.getRefPixelY()-(2<<(-isJumping)));
                } else {
                    
// персонаж падает вниз
                    
if (isJumping != -noJump 1) {
                        
sprite.setRefPixelPosition(sprite.getRefPixelX(), sprite.getRefPixelY() + (2<<isJumping));
                    } else {
                        
// Прыжок завершен переводим персонажа в пешеходное состояние
                        
isJumping GCanvas.JUMP_VALUE;
                        
sprite.setRefPixelPosition(sprite.getRefPixelX(), 179);
                    }
                }
            } else {
                
// остановить выполнение треда
                
stop();
            }
            try {
                
Thread.sleep(DELAY);
            } catch (
InterruptedException e) {
                
System.out.println(getClass().getName()+" - "+e.getMessage());
            }
        }
    }


Метод jumping вызывается при нажатии клавиши Вверх:

if ((keyStates UP_PRESSED) != 0) {
   if (
lastDirection != UP) {
       
lastDirection UP;
       
//gnomeSprite.setFrameSequence(sGnomeSequence);
       
gnomeSprite.setTransform(Sprite.TRANS_NONE);
       
// jump...
       
jt.jumping(); // прыгаем...
       
continue;
   }

jt - класс прыжка...




Как мне заставить остановить выполнение треда прыжка?
(Offline)
 
Ответить с цитированием
Старый 21.10.2011, 01:55   #2
Aarrgghh
AnyKey`щик
 
Регистрация: 03.10.2011
Сообщений: 9
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Проблема с Thread

Кстати вот прикрепил ниже результат..
Вложения
Тип файла: zip GameTest.zip (14.0 Кб, 694 просмотров)
(Offline)
 
Ответить с цитированием
Старый 07.12.2011, 13:28   #3
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Проблема с Thread

При вызове thread.start() запускается метод run(), когда он доходит до конца, то поток прекращает работу, "умирает". чтобы снова работало, нужно перед thread.start(); добавить thread = new Thread(this); чтоб заново создать поток.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 03:45.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com