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

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

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

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 21.04.2007, 00:20   #1
aureli0
ПроЭктировщик
 
Регистрация: 19.03.2007
Сообщений: 134
Написано 10 полезных сообщений
(для 20 пользователей)
столкнулся с такой проблемой при работе в МР с библиотекой game от Pilgrim'а. Клавиатура считывается непрерывно. Тоесть например при управлении спрайта - спрайт движется без рывков после первого нажатия и удержания клавиши направления. Вопрос как зделать однократное нажатие?

если будут предложения пользоватся стандартными функциями- вместе с библиотекой чето не получается.
(Offline)
 
Ответить с цитированием
Старый 21.04.2007, 12:12   #2
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Re: работа с клавиатурой. однократное нажатие клавиши

Можно сделать, что и стандартные пойдут. И вообще надо будет либу обновить
(Offline)
 
Ответить с цитированием
Старый 21.04.2007, 23:29   #3
aureli0
ПроЭктировщик
 
Регистрация: 19.03.2007
Сообщений: 134
Написано 10 полезных сообщений
(для 20 пользователей)
Re: работа с клавиатурой. однократное нажатие клавиши

а как зделать ? я псматрел впринципе можно и стандартными обойтись - клавиши работают на непрерывное нажатие. А вот однократное как зделать то? Мож быть надо таймер какойнить ввести на нажатие но только получится что для каждой кнопки наверно надо будет делать свой таймер. или просто создать массив таймеров, где индекс массива обозначал к какой кнопке он соответствует. Но имхо бред все это. Должно это как то все проще реализовыватся.. Подскажите пожалуста что делать?
ЗЫ: А обновления либы буду ждать с нетерпением)))
(Offline)
 
Ответить с цитированием
Старый 22.04.2007, 00:10   #4
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Re: работа с клавиатурой. однократное нажатие клавиши

Я не уверен, но можно попробовать примерно так:

const
num_keys=10;//кол-во клавиш
LEFT_PRESSED = 4;//код клавиши Left из примера

var
keys:array[1..num_keys]of boolean;//массив состояний клавиш
//true-нажата,false-отпущена
key:integer;
index:integer;//номер в массиве последней нажатой клавиши


begin
....
//гдето в цикле обработки клавы...
key:=getkeyclicked;
if game.get_bit(key, LEFT_PRESSED)<>0 then
begin
if not keys[1] then делаем что надо//если клавиша не нажата то делаем ///что надо
keys[1]:=true;
index:=1;
end;

***//аналогично остальные клавиши

while not
(game.get_bit(key, LEFT_PRESSED)=0)and(
game.get_bit(key, RIGHT_PRESSED)=0)and(Другие клавиши) do delay(100);
//пока кнопку не отпустят, крутимся на месте
keys[index]:=false;
//далее по циклу

ЗЫ.чем не устраивает совместное использование
стд и библиотечных функций как в кпимере?
(Offline)
 
Ответить с цитированием
Старый 22.04.2007, 15:38   #5
aRix
AnyKey`щик
 
Регистрация: 20.04.2007
Сообщений: 5
Написано 0 полезных сообщений
(для 0 пользователей)
Re: работа с клавиатурой. однократное нажатие клавиши

Че-то у меня не запахало
(Offline)
 
Ответить с цитированием
Старый 23.04.2007, 00:15   #6
aureli0
ПроЭктировщик
 
Регистрация: 19.03.2007
Сообщений: 134
Написано 10 полезных сообщений
(для 20 пользователей)
Re: работа с клавиатурой. однократное нажатие клавиши

аГА!! у меня получилось!!
Vint спсибо те за идею!!! Расцеловал бы вот кароче така я фигня:
работает на одно нажатие тока кнопка 2 (вверх)
остальные срабатывают на непрерывное нажатие, но заменить их эт как делать нечего))


var
key:integer;
ScreenHeight,ScreenWidth:integer;
x,y,a4:integer;
keys:array[1..10]of boolean;//массив состояний клавиш
index:integer;//номер в массиве последней нажатой клавиши
begin
ScreenHeight := GetHeight;
ScreenWidth := GetWidth;
a4:=getImageHeight (loadImage('/man.png'));
repeat
key := getKeyPressed;
if (keys[2]=false) and (key =KE_KEY2) then
begin
y:=y-1;
keys[2]:=true;
end;
if key=ke_none then keys[2]:=false;
if key =KE_KEY4 then x:=x-1;
if key =KE_KEY6 then x:=x+1;

if key =KE_KEY8 then y:=y+1;
setcolor(255,255,255);
FillRect(0, 0, GetWidth, GetHeight);
drawImage(loadImage('/man.png'), x, y);
repaint;
delay(40);
until key = KE_KEY0 ;
end.
я думаю и с либовскими функциями будет работать, хотя чесн остаточно и стандартных, единственно что кнопки надо будет прописывать както под другому в отличие от цифер
(Offline)
 
Ответить с цитированием
Старый 23.04.2007, 01:04   #7
aureli0
ПроЭктировщик
 
Регистрация: 19.03.2007
Сообщений: 134
Написано 10 полезных сообщений
(для 20 пользователей)
Re: работа с клавиатурой. однократное нажатие клавиши

блин, чето я перемудрил все намного проще)) есть такая функция getKeyclicked; и все больше ниче кроме нее и ненужно)
(Offline)
 
Ответить с цитированием
Старый 23.04.2007, 01:49   #8
aureli0
ПроЭктировщик
 
Регистрация: 19.03.2007
Сообщений: 134
Написано 10 полезных сообщений
(для 20 пользователей)
Re: работа с клавиатурой. однократное нажатие клавиши

черт, при работе с либой стандартные функции отслеживания клавиатуры не работают вапще((( а если делать с либой чтото похожа на то что было в предпредыдущем посте - то там нету константы на KE_NONE.. выручайте!
(Offline)
 
Ответить с цитированием
Старый 23.04.2007, 23:20   #9
aureli0
ПроЭктировщик
 
Регистрация: 19.03.2007
Сообщений: 134
Написано 10 полезных сообщений
(для 20 пользователей)
Re: работа с клавиатурой. однократное нажатие клавиши

вот получилось зделать при использовании либы однократное нажатие
каму нада - катайте

const
UP_PRESSED = 2;
DOWN_PRESSED = 64;
LEFT_PRESSED = 4;
RIGHT_PRESSED = 32;
FIRE_PRESSED = 256;
GAME_A_PRESSED = 512;
GAME_B_PRESSED = 1024;
GAME_C_PRESSED = 2048;
GAME_D_PRESSED = 4096;

var
key: integer;
num:integer;// положение игрока
keys:array [0..10] of boolean;
iii:integer;
begin
game.init;
game.set_clip(0,0,128,12;
game.show;
repeat
key := game.get_key_states;//опрос клавиш для управления движением спрайта

if (game.get_bit(key, LEFT_PRESSED)<>0) and (keys[4]=false) then
begin
num:=num+1;

end;

if (game.get_bit(key, RIGHT_PRESSED)<>0) and (keys[6]=false) then
begin
num:=num-1;

end;

for iii:=0 to 10 do
begin
if key<>0 then keys[iii]:=true;
if key=0 then keys[iii]:=false;
end;
setColor(255,255,255); // очистка экрана
fillRect(0,0,getWidth, getHeight);
setColor(255,0,255);
drawText('player:'+integerToString(num), 10, 1);
game.refresh; // отображение всег
delay(30); // если хочешь чтобы по медленее махол крыльями то увеличивай

until false;
end.

ЗЫ: Спасибо Винту за идею!
ЗЫЗЫ: ждемс допатченую либу))).
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нажатие кнопок подряд temned FAQ 24 06.02.2010 11:33
Про клавиши Randomize 2D-программирование 7 26.05.2009 15:15
нажатие на правый и левый софткей ЯМАКc MidletPascal 8 28.03.2009 17:07
Светящиеся объекты и клавиши Crystal 3D-программирование 2 31.07.2007 23:15
Работа с клавиатурой... @lex Основной форум 2 20.04.2007 22:46


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


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