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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2010, 16:18   #1
Kolik317
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 64
Вопрос DelphiX таймеры и спрайт

Доброго времени суток.
Пытаюсь написать простенькую игрушку, столкнулся с проблемой.
Спрайт движется по кругу через domove, интервал счетчика 0.
Нужно чтобы помимо движения, он увеличивался, но интервал нужен где-то 20-30. Пытался припаять второй счетчик, но из него к размерам спрайта обратиться никак не получается =/. Пробовал с одним счетчиком, делать что-то типа флажков:
Код:
procedure TMonoSprite.DoMove(MoveCount: Integer);
var
n:integer;
begin
   inherited DoMove(MoveCount);
  PixelCheck := True;
  FCounter := FCounter + (100/1000)*MoveCount;
  X := X+Sin256(Trunc(FCounter))*(200/1000)*MoveCount;
  Y := Y+Cos256(Trunc(FCounter))*(200/1000)*MoveCount;
n:=n+1;
if n=5 then
 begin
if form1.a=true then
  begin
  width:=width+1;
  height:=height+1;
  if width>50 then
  form1.a:=false;
  end;
  if form1.a<>true then
  begin
  width:=width-1;
  height:=height-1;
  if width<5 then
  form1.a:=true;
  end;
 n:=0;
 end;
Но не катит, по скольку зависит от фпс, в оконном и полноэкранном режиме получается по разному.

В общем как через второй таймер обратиться к спрайту? И как я понял придется использовать обычный таймер? два TDXtimer нельзя?


Как я понимаю надо заюзать во втором таймере with tmonosprite, или with domove, но ничего не выходит.

Последний раз редактировалось Kolik317; 09.08.2010 в 16:54. Причина: ?
Kolik317 вне форума Ответить с цитированием
Старый 09.08.2010, 20:25   #2
Kolik317
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 64
По умолчанию

Сделал так:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if a=true then
  begin
  l:=l+1;
 if l>50 then
  a:=false;
  end;
  if a<>true then
  begin
  l:=l-1;
  if l<5 then
  a:=true;
end;
end;
- l - переменная ширины и длины, работает в таймере с желаемым интервалом.
В domove L присваивается ширине и высоте спрайта, с интервалом 0:
Код:
procedure TMonoSprite.DoMove(MoveCount: Integer);
var
n:integer;
begin
   inherited DoMove(MoveCount);
  PixelCheck := True;
  FCounter := FCounter + (100/1000)*MoveCount;
  X := X+Sin256(Trunc(FCounter))*(200/1000)*MoveCount;
  Y := Y+Cos256(Trunc(FCounter))*(200/1000)*MoveCount;
width:=form1.l;
height:=form1.l;
 if not Collisioned then
  begin
    Inc(FS, MoveCount);
    if FS>200 then Dead;
  end;
end;
Вообще как-то странно, я не могу понять почему он движется по кругу с постоянной скоростью, а когда я задаю там же ширину при помощи флажка, стоит переключиться в полно экранный режим, фпс поднимается с 75 до 250, и спрайт начинает увеличиваться-уменьшаться с бешеной скоростью.
В общем если кто-то сталкивался, или шарит расскажите пожалуйста как сделать грамотно.

Последний раз редактировалось Kolik317; 10.08.2010 в 08:27.
Kolik317 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймеры tools Qt и кроссплатформенное программирование С/С++ 3 30.05.2010 23:12
Таймеры Sergeu Общие вопросы C/C++ 2 25.03.2010 12:13
Не рисуется спрайт в Delphix DOLBY Мультимедиа в Delphi 0 01.04.2009 23:09
Таймеры EdNovice Общие вопросы .NET 1 06.03.2009 11:26
В чем отличия двух способов? (потоки и таймеры)) Stilet Win Api 11 31.07.2008 14:49