Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2009, 23:11   #1
Нур
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 44
Вопрос Как улеличивать скорость движения во время движия

В общем задача нарисовать шарик двигающийся от одного края к другому, при этом при нажатии клавиши вверх скорость его движения увеличивается, при нажатии вниз скорость уменьшается))) Движение реализовал. Скрость сделал пустым циклом, ну для задержки. не знаю как изменять скорость, ну понимаю что надо менять границы пустого цикла но как это сделать при движении шарика не знаю. ПОМОГИТЕ пожалуйста люди добрые)))
Нур вне форума Ответить с цитированием
Старый 22.12.2009, 23:33   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Смотря какой язык. delay или sleep, можно и таймером
eoln вне форума Ответить с цитированием
Старый 22.12.2009, 23:43   #3
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

По такому алгоритму это должно выглядеть следующим образом:
Создай обработчик OnKeyDown клавиш "вверх", "вниз", в котором определяешь - если нажата "вверх" глобальная переменная dV := +<числовое значение>; если нажата "вниз" - dV := -<числовое значение>.
А в процедуре организации движения перед циклом задержки (определяющей скорость движения) укажи
Код:
Application.ProcessMessages;
 for i:= 1 to (V + dV) do 
 begin
   < пустой цикл>
 end;
Числовые значения V и dV зависят от харатеристик компьютера (тактовая, величина памяти, загруженность системными процессами и другими приложениями и др.).Подбирать практически по факту.
При нажатии клавиш стрелки "Вниз" \ "Вверх" значение (V + dV) будет при каждом нажатии уменьшаться \ увеличиваться на величину dV, а значит и длительность выполнения цикла соответственно изменяться.
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 22.12.2009 в 23:46.
DeKot вне форума Ответить с цитированием
Старый 23.12.2009, 00:07   #4
Нур
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 44
По умолчанию

Язык Delphi
Нур вне форума Ответить с цитированием
Старый 23.12.2009, 00:12   #5
Нур
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 44
По умолчанию

DeKot как я понял то мне надо примерно вот так
Код:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key='w' then m:=m-100000;
  if Key='s' then m:=m+100000;
end;
потом когда идет цикл движения там
Код:
begin
   Canvas.Brush.Color:=Color;
   Canvas.Ellipse(x0+30,y0+30,x0-30,y0-30);
   
   x0:=x0 - 1;
   Canvas.Brush.Color:=clBlue;
   Canvas.Ellipse(x0+30,y0+30,x0-30,y0-30);
   
   Application.ProcessMessages;
   for j:=0 to m do;
   end;
Нур вне форума Ответить с цитированием
Старый 23.12.2009, 00:14   #6
Нур
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 44
По умолчанию

только вот во время цикла чет не реагирует на нажатые клавиши(((
Нур вне форума Ответить с цитированием
Старый 23.12.2009, 00:14   #7
Нур
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 44
По умолчанию

Я думал что то типа ReadKey поискать но не нашел(((
Нур вне форума Ответить с цитированием
Старый 23.12.2009, 01:05   #8
Нур
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 44
По умолчанию

аааа чувак спасибо дошло)))) я написав это просто при запуске программы раскладку на нужную не менял))) Два часа сидел))) аж истерика началась как понял суть
Нур вне форума Ответить с цитированием
Старый 23.12.2009, 08:49   #9
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

В посте №5 все правильно.Вместо буквенных клавиш лучше пользоваться клавишами управления курсора ("стрелки")
Код:
case Key of
     38: m:=m+100000; // стрелка "вверх"
     40: m:=m-100000; // стрелка "вниз"
     end;
Тогда и раскладка не будет влиять.
Или же :
Код:
if (Key='w') or (Key='ц') then m:=m-100000;
  if (Key='s') or (Key='ы') then m:=m+100000;
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 23.12.2009, 13:00   #10
Нур
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 44
По умолчанию

Спасибо еще раз. Просто когда делал не мог вспонить коды стрелок)) поэтому для проверки буквы писал.
Нур вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать скорость при закачке tIdHttp.get? Altera Работа с сетью в Delphi 7 09.04.2009 11:27
Как узнать программно скорость чтения и записи на жесткий диск. начинающий кодер Общие вопросы Delphi 7 05.03.2009 16:13
Как сделать чтобы показывалась скорость интернета Bigtyoma Свободное общение 9 25.09.2008 13:31
Как отследить направление движения мыши? yourself Общие вопросы Delphi 8 30.05.2008 08:04
Скорость движения обьекта shepelin Общие вопросы Delphi 9 23.01.2008 11:51