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

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

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

Ответ
 
Опции темы
Старый 25.06.2010, 11:13   #1
NGC
AnyKey`щик
 
Регистрация: 25.06.2010
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Сообщение Adventure Point

Вот делал мобильную версию своей игры Adventure Point специально для телефона Nokia 6070. Вроде бы и похоже на компьютерную версию, но вот что-то не так с движением главного героя. Клавиши бывает не срабатывают или наоборот срабатывают несколько раз, когда нужно один.
Возможно, что-то в том месте, где идет определение кода клавиши и вызов процедур перемещений. Возможно, Delay...

Может подскажите, как лучше сделать управление героем, как в компьютерной версии?
Вложения
Тип файла: zip APM.zip (157.3 Кб, 478 просмотров)
Тип файла: zip AP Comp.zip (1.20 Мб, 436 просмотров)
(Offline)
 
Ответить с цитированием
Старый 25.06.2010, 14:09   #2
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Adventure Point

Лучше использовать такой цикл опроса клавиатуры:
var
 
Act:integer;

begin
 repeat
  Act
:=KeyToAction(GetKeyPressed);
  if 
Act=GA_UP then
   jump
  
else if Act=GA_LEFT then
   GoLeft
  
else if ...
  
Delay(200);
 
until ... 
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Igor (25.06.2010)
Старый 25.06.2010, 14:29   #3
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Adventure Point

Лучше использовать такой цикл опроса клавиатуры:
Не знал. Большое спасибо.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 25.06.2010, 15:45   #4
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Adventure Point

Пауза великовата да и смысл проверять клавиши каждый раз?
Я обычно делаю конструкции такого вида:

repeat
repeat
key
:=GetKeyPressed;
Delay(20);
if (
key<>0then break;
until false;
key:=KeyToAction(key);
if (
key GA_LEFTthen MoveLeft;
if (
key GA_RIGHTthen MoveRIght;
.....
until false
(Offline)
 
Ответить с цитированием
Старый 25.06.2010, 16:29   #5
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Adventure Point

Не проще делать так?
repeat
repeat
key
:=GetKeyPressed;
Delay(20);
until key<>0;
key:=KeyToAction(key);
if (
key = GA_LEFT) then MoveLeft;
if (
key = GA_RIGHT) then MoveRIght;
.....
until false;
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Rock2roll (14.07.2010)
Старый 25.06.2010, 22:58   #6
NGC
AnyKey`щик
 
Регистрация: 25.06.2010
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Adventure Point

Используя всё, что здесь было написано, за что вам всем спасибо, я сделал вот что:

Repeat
      Repeat
       act
:=GetKeyPressed;
       
Delay(20);
      
Until act<>0;
      
act:=KeyToAction(act);
      IF 
act=GA_RIGHT Then GoRight
      
ELSE IF act=GA_LEFT Then GoLeft
      
ELSE IF act=GA_UP Then Jump;
     
Until win=true
Но теперь главный герой просто летает по уровню через все пропасти, прыгает до потолка...

Процедура прыжка:

procedure Jump;
begin
 
IF (py-1)>=1 Then IF bas[px,py-1]=0 Then
 begin
  SetColor
(87,192,255);
  
x:=(px-1)*10;
  
y:=(py-1)*10;
  
FillRect(x,y,10,10);
  
py:=py-1;
  
y:=(py-1)*10;
  
DrawImage(pl,x,y);
  
repaint;
  
i:=0;
  
Repeat
     Repeat
      act
:=GetKeyPressed;
      
Delay(20);
      
i:=i+1;
      IF 
i=10 Then break;
     
Until act<>0;
     
act:=KeyToAction(act);
     IF 
act=GA_RIGHT Then GoRight
     
ELSE IF act=GA_LEFT Then GoLeft
     
ELSE IF act=GA_UP Then Jump;
    
Until i=10;
    
i:=0;
    
Fall;
 
end;
end
(Offline)
 
Ответить с цитированием
Старый 27.06.2010, 17:47   #7
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Adventure Point

Но теперь главный герой просто летает по уровню через все пропасти, прыгает до потолка...
Дело в том, что функция ждет нажатия кнопки и потом выполняется
для игры лучше попробовать
act:=GetKeyPressed;
if 
act<>ke_none then
  begin
    act
:=KeyToAction(act); 
      IF 
act=GA_RIGHT Then 
        GoRight 
      
ELSE
        IF 
act=GA_LEFT Then 
          GoLeft 
        
ELSE
         IF 
act=GA_UP Then 
           Jump
;
  
end
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
NGC (03.07.2010)
Старый 29.06.2010, 10:44   #8
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: Adventure Point

NGC, хорошие исходники, понятные.
переделал их - без использования подпрограмм.
Вложения
Тип файла: zip amp.zip (48.2 Кб, 449 просмотров)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
NGC (03.07.2010)
Старый 03.07.2010, 11:52   #9
NGC
AnyKey`щик
 
Регистрация: 25.06.2010
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Adventure Point

Огромное спасибо за ответы. abcdef, ваш вариант работает отлично! Я и сам продолжал делать игру... Только вот почему-то вчера всё летало, а сегодня снова не хочет! abcdef, я попробую подробнее рассмотреть ваши исходники. Ёще раз спасибо!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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