Форум: "Игры";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
ВнизDelphIX Как сделать чтоб для каждого спрайта была своя процедура? Найти похожие ветки
← →
GGG (2005-11-04 22:31) [0]У меня в программе нужно чтоб спрайт летел к координатам, на которых клацнул мышкой. А я когда клацаю, то угол поворота меняется не у одного спрайта а у всех. Как сделать чтоб процедура была одна, но после создания спрайта переменные в ней оставались старыми?
думаю вы поняли
← →
JUS (2005-11-04 22:49) [1]Скинь код, ато нифига непонятно, как тебе обьяснить!
← →
Кефир87 © (2005-11-04 23:03) [2]0.0
Сделать отдельный спрайт?!
← →
JUS (2005-11-04 23:04) [3]
> Кефир87 © (04.11.05 23:03) [2]
> 0.0
> Сделать отдельный спрайт?!
Я примерно понял чё у него за проблема, пусть код выложит для наглядности
← →
Кефир87 © (2005-11-04 23:26) [4]Да не надо кода. Тупит просто человек. У меня тоже такое бывает... Тем более использовать DelphiX не зная ООП очень тяжело...
← →
JUS (2005-11-04 23:34) [5]Ну так и я про тоже... :-)))
← →
Фео (2005-11-04 23:43) [6]для каждого спрайта сделай свои координаты...
← →
GGG (2005-11-13 14:35) [7]короче вот прога
нужно что б огненный шарики летел в сторону клика курсора,а после следующего клика он продолжал лететь куда и двигался сначала, но следующий шарик летел в сторону второго клика и т.д, и причем точно а не косо :), формула наверное у меня говенная))))
короче я сам не понял что написал, собсно вот сам код
http://files.adamant.ua/531
Жду помощи отцы))
← →
2Wish (2005-11-13 15:45) [8]Ссылка битая, выложи в где-нить другом месте.
← →
GGG (2005-11-13 16:00) [9]
> Ссылка битая, выложи в где-нить другом месте.
просто это украинский банк файлов, может у тебя вол на Украину стоит?
скажи плиз какой-то русский банк файлов если можешь :)
← →
Signate © (2005-11-13 16:02) [10]webfile.ru
← →
GGG (2005-11-13 16:04) [11]кстати, извините что код такой запутанный, я аматор в программировании, и по проффесиональному строить его неумею
← →
GGG (2005-11-13 16:07) [12]вот он на русском трафике webfile.ru/630160
← →
2Wish (2005-11-13 17:51) [13]Я уже нашел твою ошибку, ща выложу нормальный код, но можно поинтересоватся: а зачем при создании шара TList делать?
← →
2Wish (2005-11-13 18:06) [14]Вобщем нужно добавить в класс TFireBall две переменные GoX и GoY а не в процедуру движения и вычислять эти GoY и GoX в момент создания самого спрайта, вот куски правильно кода:
type
TFireBall = class(TImageSprite)
protected
procedure DoMove(MoveCount: Integer); override;
private
gox,goy: extended;
end;Procedure TFireball.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
x:=x+gox;
y:=y+goy;
end;
А вот это впихнуть в процедуру создания спрайта:speedx:=3*cos((angle1)*pi/128);
speedy:=3*sin((angle1)*pi/128);
← →
GGG (2005-11-13 18:39) [15]Сенк! ща попробую!
а насчет TList... я был совсем в отчании :) и начал искать по инету куски кода который мог мне помочь, и наткнулся на такой способ с использованием TList только он нифига неработал:(
← →
GGG (2005-11-13 18:50) [16]
> А вот это впихнуть в процедуру создания спрайта:
> 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?
← →
2Wish (2005-11-13 21:12) [17]да, именно так и сделать а насчет speedx, это я так в своих прогах пишу, ошибся, читай как goX.
← →
GGG (2005-11-14 00:00) [18]тут получилась у меня аксес виолейшн оф адрес :((
webfile.ru/631027
← →
GGG (2005-11-14 16:05) [19]Удалено модератором
Примечание: Создание пустых сообщений
← →
GGG (2005-11-14 20:27) [20]плиз посмотрите что за фигня там, а то я из-за этой ошибки немогу дальше продвигаться)
← →
GGG (2005-11-15 09:30) [21]Удалено модератором
Примечание: Создание пустых сообщений
← →
GGG (2005-11-15 19:08) [22]О! Я КАК ВСЕГДА ПРОТУПИЛ (наверное нужно завязывать с пивом вообще:) ) Все получилось! нужно было просто процедуру с TList удалить! Всем спасибо, особенно 2Wish :) !
← →
2Wish (2005-11-15 21:16) [23]Пожалуйста. :)
← →
GGG (2005-11-15 22:34) [24]Тут еще одна похожая проблема. Хочу чтоб монстры создавались и двигались как в кримсонленде к игроку :) но не постоянно а время от времени поворачивали в произвольную сторону и шли пару секунд туда. Но получается сделать чтоб они просто шли на игрока. А когда пытаешся сделать что б поворачивали и шли в произвольную сторону время от времени, то получается та же фигня что и с файрболами, все монстры идут под одним и тем же углом. Отличие от первой моей проблемы в том, что тут не задашь спрайту две координаты чтоб он шел постоянно к ним и не реагировал на их подальшее изменение. Тут координаты постоянно меняются. Вот код который у меня получился
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;
хелп мастера! :(
← →
GGG (2005-11-16 18:48) [25]и еще у меня collision между файрболом и монстром происходит только на первом кадре анимации, а как сделать что б colloson происходил на любом кадре?
← →
Ландграф мобил=) (2005-11-17 05:44) [26]Завязывай с программированием, выращивай кактусы. Или пиши что попроще игр
← →
GGG (2005-11-17 08:55) [27]2 Ландграф мобил=) это все, чем ты смог мне помочь?
Я изучаю программирование всего 1 месяц, думаю мне простительны такие вопросы!
← →
Ландграф мобил=) (2005-11-17 20:16) [28]Ну дык и не лезь в написание игр - познавай ООП, пиши текстовый редактор, потом переделывай его под текстовый квест, добавляй картинки, звуки, как напишешь - с новыми знаниями перечитай код, ужаснись, перепиши заново, перечитай снова, ужаснись... Цикл повторять пока ты не оценишь красоту своего кода, эта ступень когда знания догоняют руки=) Но пройдет не меньше года... Я изучаю objectpascal хрен знает скока, помню купил новинку - делфи4, и по сейчас каждый раз ужасаюсь своему коду спустя время=)
← →
GGG (2005-11-17 20:27) [29]Я тебя понял)) но все же подскажи плиз по теме, буду ОЧЕНЬ благодарен
← →
GGG (2005-11-18 18:20) [30]насчет последнего кода который я написал у меня все получилось. А вот как сделать чтоб collision происходило на всех кадрах анимации спрайта а не на первом я незнаю ( кто поможет?
← →
Ландграф мобил=) (2005-11-18 19:46) [31]ладно, подсказываю - реализуй свой колижн
← →
GGG (2005-11-18 20:01) [32]тоесть свою процедуру столкновения написать?
← →
MonoLife (2005-11-19 03:22) [33]Из "справки": [b]Pixelcheck[/b] никогда не работает (или очент плохо работает) с обоими столкнувшимися анимированными спрайтами, плохо работает с одним анимированным спрайтом, хорошо работает с не анимированными спрайтами".
Если у тебя включен этот режим проверки столкновения отключи его. Пусть спрайты сталкиваются рамками.
← →
GGG (2005-11-19 13:00) [34]2 MonoLife ok senk!
← →
Cash © (2005-11-23 16:20) [35]GGG:
Охххххх, вспоминаю первые свои три недели изучения DelphiX,
После двух лет шкодинга на Delphi потянуло к играм.
Взял DelphiX и начал пороть вещи гораздо хуже чем то, что
вижу здесь! Но потом вырос, окреп и возмужал! :)))
Короче:
Там же для спрайта есть хорошие вещи, называются:
DoMove и DoDraw.
Первая нужна только для осуществления перемещения спрайта,
Вторая - только для отрисовки оного.
Разрабатывая своего потомка класса TSprite или TImageSprite
следует учесть, что делаешь ты не индивидуум, а модель этого индивидуума!
То есть, необходимо описать общие для всех клонов этого индивида в процедурах DoMove и DoDraw.
Внешнее воздействие на подконтрольный индивид (то есть на плеер или на выделенную единицу или что то там еще) должно осуществляться над переменной этого типа (объектом), а не над всем классом - это не правильно! От сюда у тебя все объекты крутились и вертелись одинаково!
Для того, чтобы сделать всевозможные маневры объектов при их движении сделай дополнительную процедуру, в ней говори, чтоб ето чучило рулило в другую сторону. А в таймере сделай генератор, который ето самое чучило и выбирает и запускает у него эту проц-у.
И самое главное (до этого я додумался в самом конце):
Переменные, с которыми орудуют объекты этого класса должны быть внутри самого класса в области Pivate или Protected, как захочешь! Это относится к переменным угла вращения, перемещения, смещения, и всякого такого.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.01 c