Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DelphIX Как сделать чтоб для каждого спрайта была своя процедура? [Delphi, Windows]


Страницы:   1 2

GGG ©   (2005-11-04 22:31:00) 

У меня в программе нужно чтоб спрайт летел к координатам, на которых клацнул мышкой. А я когда клацаю, то угол поворота меняется не у одного спрайта а у всех. Как сделать чтоб процедура была одна, но после создания спрайта переменные в ней оставались старыми?

думаю вы поняли


Cash   (2005-11-23 16:20:00) [1]

GGG:
Охххххх, вспоминаю первые свои три недели изучения DelphiX,
После двух лет шкодинга на Delphi потянуло к играм.
Взял DelphiX и начал пороть вещи гораздо хуже чем то, что
вижу здесь! Но потом вырос, окреп и возмужал! :)))

Короче:
Там же для спрайта есть хорошие вещи, называются:
 DoMove и DoDraw.
Первая нужна только для осуществления перемещения спрайта,
Вторая - только для отрисовки оного.

Разрабатывая своего потомка класса TSprite или TImageSprite
следует учесть, что делаешь ты не индивидуум, а модель этого индивидуума!
То есть, необходимо описать общие для всех клонов этого индивида в процедурах DoMove и DoDraw.

Внешнее воздействие на подконтрольный индивид (то есть на плеер или на выделенную единицу или что то там еще) должно осуществляться над переменной этого типа (объектом), а не над всем классом - это не правильно! От сюда у тебя все объекты крутились и вертелись одинаково!

Для того, чтобы сделать всевозможные маневры объектов при их движении сделай дополнительную процедуру, в ней говори, чтоб ето чучило рулило в другую сторону. А в таймере сделай генератор, который ето самое чучило и выбирает и запускает у него эту проц-у.

И самое главное (до этого я додумался в самом конце):
Переменные, с которыми орудуют объекты этого класса должны быть внутри самого класса в области Pivate или Protected, как захочешь! Это относится к переменным угла вращения, перемещения, смещения, и всякого такого.


GGG   (2005-11-19 13:00:00) [2]

2 MonoLife ok senk!


MonoLife   (2005-11-19 03:22:00) [3]

Из "справки": [b]Pixelcheck[/b] никогда не работает (или очент плохо работает) с обоими столкнувшимися анимированными спрайтами, плохо работает с одним анимированным спрайтом, хорошо работает с не анимированными спрайтами".
Если у тебя включен этот режим проверки столкновения отключи его. Пусть спрайты сталкиваются рамками.


GGG   (2005-11-18 20:01:00) [4]

тоесть свою процедуру столкновения написать?


Ландграф мобил=)   (2005-11-18 19:46:00) [5]

ладно, подсказываю - реализуй свой колижн


GGG   (2005-11-18 18:20:00) [6]

насчет последнего кода который я написал у меня все получилось. А вот как сделать чтоб collision происходило на всех кадрах анимации спрайта а не на первом я незнаю ( кто поможет?


GGG   (2005-11-17 20:27:00) [7]

Я тебя понял)) но все же подскажи плиз по теме, буду ОЧЕНЬ благодарен


Ландграф мобил=)   (2005-11-17 20:16:00) [8]

Ну дык и не лезь в написание игр - познавай ООП, пиши текстовый редактор, потом переделывай его под текстовый квест, добавляй картинки, звуки, как напишешь - с новыми знаниями перечитай код, ужаснись, перепиши заново, перечитай снова, ужаснись... Цикл повторять пока ты не оценишь красоту своего кода, эта ступень когда знания догоняют руки=) Но пройдет не меньше года... Я изучаю objectpascal хрен знает скока, помню купил новинку - делфи4, и по сейчас каждый раз ужасаюсь своему коду спустя время=)


GGG   (2005-11-17 08:55:00) [9]

2 Ландграф мобил=) это все, чем ты смог мне помочь?
Я изучаю программирование всего 1 месяц, думаю мне простительны такие вопросы!


Ландграф мобил=)   (2005-11-17 05:44:00) [10]

Завязывай с программированием, выращивай кактусы. Или пиши что попроще игр


GGG   (2005-11-16 18:48:00) [11]

и еще у меня collision между файрболом и монстром происходит только на первом кадре анимации, а как сделать что б colloson происходил на любом кадре?


GGG   (2005-11-15 22:34:00) [12]

Тут еще одна похожая проблема. Хочу чтоб монстры создавались и двигались как в кримсонленде к игроку :) но не постоянно а время от времени поворачивали в произвольную сторону и шли пару секунд туда. Но получается сделать чтоб они просто шли на игрока. А когда пытаешся сделать что б поворачивали и шли в произвольную сторону время от времени, то получается та же фигня что и с файрболами, все монстры идут под одним и тем же углом. Отличие от первой моей проблемы в том, что тут не задашь спрайту две координаты чтоб он шел постоянно к ним и не реагировал на их подальшее изменение. Тут координаты постоянно меняются. Вот код который у меня получился

 Procedure TMonster.DoMove(MoveCount: Integer);

 begin
    inherited DoMove(MoveCount);
    monsterposx:=round(x);// типа что б монстр появлялся в произвольном месте
    monsterposy:=round(y);
mxfire:=round(x);
myfire:=round(y);
mx:=round(player1x+24);
my:=round(player1y+17);
 If (my>myfire) then monsterangle:=round(-arctan((mx-mxfire)/(my-myfire))/Pi*128)+126
else If (my<myfire) then monsterangle:=round(-arctan((mx-mxfire)/(my-myfire))/Pi*128)-2;
  monsterangle:=monsterangle-62;
end;
end ;

 form1.DXImageList3.Items[0].DrawRotate(form1.dxdraw1.Surface,mxfire,myfire,15,16,1,0.5,0.5,monsterangle);

        PixelCheck:=true;
        AnimCount := Image.PatternCount;
        AnimLooped := True;

    monstergox:=3*cos((monsterangle)*pi/128);
monstergoy:=3*sin((monsterangle)*pi/128);

 AnimCount := Image.PatternCount;
       AnimLooped := True;              
       AnimSpeed := 10 / 1000;        
  x:=x+monstergox;
y:=y+monstergoy;

   end;

хелп мастера! :(


2Wish   (2005-11-15 21:16:00) [13]

Пожалуйста. :)


GGG   (2005-11-15 19:08:00) [14]

О! Я КАК ВСЕГДА ПРОТУПИЛ (наверное нужно завязывать с пивом вообще:) ) Все получилось! нужно было просто процедуру с TList удалить! Всем спасибо, особенно 2Wish :) !


GGG   (2005-11-15 09:30:00) [15]

Удалено модератором
Примечание: Создание пустых сообщений


GGG   (2005-11-14 20:27:00) [16]

плиз посмотрите что за фигня там, а то я из-за этой ошибки немогу дальше продвигаться)


GGG   (2005-11-14 16:05:00) [17]

Удалено модератором
Примечание: Создание пустых сообщений


GGG   (2005-11-14 00:00:00) [18]

тут получилась у меня аксес виолейшн оф адрес :((
webfile.ru/631027


2Wish   (2005-11-13 21:12:00) [19]

да, именно так и сделать а насчет speedx, это я так в своих прогах пишу, ошибся, читай как goX.


GGG   (2005-11-13 18:50:00) [20]


> А вот это впихнуть в процедуру создания спрайта:
>  speedx:=3*cos((angle1)*pi/128);
>  speedy:=3*sin((angle1)*pi/128);


тут вопросик (тупой, конечно):

а процедура создания спрайта TFireball это типа в

procedure TForm1.FormCreate(Sender: TObject);
begin
with TFireball.Create(Dxspriteengine1.Engine) do
begin
PixelCheck := True;
 speedx:=3*cos((angle1)*pi/128);
 speedy:=3*sin((angle1)*pi/128);

end;
end;

а где обьявлять speedx, speedy?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо