forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты на MidletPascal (http://forum.boolean.name/forumdisplay.php?f=88)
-   -   Adventure Point (http://forum.boolean.name/showthread.php?t=12727)

NGC 25.06.2010 11:13

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

Может подскажите, как лучше сделать управление героем, как в компьютерной версии?

ViNT 25.06.2010 14:09

Ответ: Adventure Point
 
Лучше использовать такой цикл опроса клавиатуры:
PHP код:

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 ... 


Igor 25.06.2010 14:29

Ответ: Adventure Point
 
Цитата:

Лучше использовать такой цикл опроса клавиатуры:
Не знал. Большое спасибо.

odd 25.06.2010 15:45

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

PHP код:

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


Igor 25.06.2010 16:29

Ответ: 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;


NGC 25.06.2010 22:58

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

PHP код:

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

Но теперь главный герой просто летает по уровню через все пропасти, прыгает до потолка...

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

PHP код:

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


Igor 27.06.2010 17:47

Ответ: Adventure Point
 
Цитата:

Но теперь главный герой просто летает по уровню через все пропасти, прыгает до потолка...
Дело в том, что функция ждет нажатия кнопки и потом выполняется
для игры лучше попробовать
PHP код:

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


abcdef 29.06.2010 10:44

Ответ: Adventure Point
 
Вложений: 1
NGC, хорошие исходники, понятные.
переделал их - без использования подпрограмм.

NGC 03.07.2010 11:52

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


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot