Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];

Вниз

прыжок в игре   Найти похожие ветки 

 
nordic3   (2006-11-29 18:21) [0]

Делаю игру, что-то типа Марио.
Координаты человечка: х и у.
Когда нажимаю в сторону, то меняется х, а когда вверх, то запускается таймер, где постепенно меняется координата у.
Ожидаемый эффект: жмешь вперед; не отпуская, нажимаешь вверх; должен лететь на искосок.
Получается: жмешь вперед; не отпуская, нажимаешь вверх; летит прямо вверх, вообще не замечает нажатую клавишу вперед.
Как избежать этого?
Предполагаю, что стоит все время проверять нажата ли кнопка, но как это сделать? Или может есть другой вариант?


 
XProger ©   (2006-11-29 18:49) [1]

Есть такое понятие в физике - скорость. Вот в зависимости от неё и должен передвигаться объект...


 
Pa5ha ©   (2006-11-29 20:05) [2]

function IsKeyDown(c : Char) : Boolean;
var
  vk : Integer;
begin
  // "$FF" filters out translators like Shift, Ctrl, Alt
  vk:=VkKeyScan(c) and $FF;
  if vk<>$FF then
     Result:=(GetAsyncKeyState(vk)<0)
  else Result:=False;
end;

// IsKeyDown
//
function IsKeyDown(vk : TVirtualKeyCode) : Boolean;
begin
  Result:=(GetAsyncKeyState(vk)<>0);
end;

// KeyPressed
//
function KeyPressed(minVkCode : TVirtualKeyCode = 0) : TVirtualKeyCode;
var
  i : Integer;
  buf : TKeyboardState;
begin
  Assert(minVkCode>=0);
  Result:=-1;
  if GetKeyboardState(buf) then begin
     for i:=minVkCode to High(buf) do begin
        if (buf[i] and $80)<>0 then begin
           Result:=i;
           Break;
        end;
     end;
  end;
end;


 
Pa5ha ©   (2006-11-29 20:05) [3]

Это иззз демки ODE sulaco. Модуль keyboard.pas


 
megabyte-ceercop ©   (2006-11-30 08:30) [4]


> XProger

Правильно написал. Все проблемы с прыжками и правильным перемещением пропадут, если герою добавить два свойства - скорость по оси X и скорость по оси Y.



Xspeed := 0;

If KeyLeft then Xspeed := -3;  //Меняем горизонтальную скорость в зависимости от клавиш.
If KeyRight then Xspeed :=  3;

If (KeyJump  and  HeroOnGround )  then Yspeed := -15;   //Если герой на
//земле и нажата кнопка прыжок - даем ускорение вверх с силой -15

If (not HeroOnGround) then Yspeed := Yspeed + 2;     //пока в воздухе - на вертикальную скорость воздействует гравитация.

//В конце всегда приращиваем скорость к координатам (скорость влияет на положение героя.)
X := X + Xspeed;
Y := Y + Yspeed;



 
megabyte-ceercop ©   (2006-11-30 08:33) [5]

А еще стандартное событие onKeyPress возвращает только последнюю клавишу. Используй onKeyDown и onKeyUp для определения нажима о тжима клавиш. Состояние нужных тебе клавиш запоминай. Возможно проблема в этом.


 
Pa5ha ©   (2006-11-30 17:28) [6]

Лучше не запоминать нажатия клавиш, а проверять непосредственно, когда нужно ибо очередь клавы... XProger лучше объяснит -)



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.004 c
2-1197294681
Zheksik
2007-12-10 16:51
2008.01.06
Почему в Memo и Блокноте разное выравнивание текста?


15-1196676782
vajo
2007-12-03 13:13
2008.01.06
Стоит ли брать эту видеокарту?


2-1197048755
Leonid
2007-12-07 20:32
2008.01.06
ComboBox и Object


15-1196791428
@!!ex
2007-12-04 21:03
2008.01.06
Драйвер на Windows 2003 Server


2-1197278553
malyar
2007-12-10 12:22
2008.01.06
stringgrid какая яцейка находится под курсором мыши





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский