Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
6-1143250745
Setor
2006-03-25 04:39
2006.08.06
Как завершить работу сетевого приложения?


3-1148961704
ganda
2006-05-30 08:01
2006.08.06
Организация истории изменения таблицы


1-1151056210
Dok
2006-06-23 13:50
2006.08.06
Как создать комобьект типа IStream?


2-1152795828
Dbrg
2006-07-13 17:03
2006.08.06
Учетные записи пользователей


3-1149160684
ganda
2006-06-01 15:18
2006.08.06
SQL - запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский