Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Вниз

Как двигать спрайт...   Найти похожие ветки 

 
JUS   (2004-08-15 20:59) [0]

Подскажите плиз как сделать чтоб мой джигит шёл. т.е. Я нажимаю кнопку вправо и как обратится к его координатам? и ещё: он падает с неба на землю TZemla, как сделать чтоб он остановился на ней? (не так как сделал я , а по другому)? {я пока учусь Sprite у меня не анимированные пока}; Вот Код игры:

...
//////////////
var
 Form1: TForm1;

implementation

{$R *.dfm}
 Type
 TZemla=Class(TImageSprite)
 Public
 Constructor Create(AParent:TSprite);Override;
 end;

 TTrava=Class(TImageSprite)
 Public
 Constructor Create(AParent:TSprite);Override;
 end;

 TDzigit=Class(TImageSprite)
 Procedure DoCollision(Sprite:TSprite; var Done:Boolean);Override;
 Procedure DoMove(MoveCount:Integer);Override;
 Public
 constructor Create(Aparent:TSprite);Override;
 End;
 /////////////////////////////////////////////////////
 Constructor TZemla.Create(AParent:TSprite);
 Begin
 Inherited Create(AParent);
 Image:=Form1.DXImageList1.Items.Find("земля");
 X:=0;
 Y:=500;
 Z:=2;
 Width:=Image.Width;
 Height:=Image.Height;
 end;

 Constructor TTrava.Create(AParent:TSprite);
 Begin
 Inherited Create(AParent);
 Image:=Form1.DXImageList1.Items.Find("трава");
 X:=0;
 Y:=460;
 Z:=2;
 Width:=Image.Width;
 Height:=Image.Height;
 end;

 Constructor TDzigit.Create(AParent:TSprite);
 Begin
 Inherited Create(AParent);
 Image:=Form1.DXImageList1.Items.Find("Джигит");
 X:=100;
 y:=0;
 z:=2;
 Width:=Image.Width;
 Height:=Image.Height;
 PixelCheck:=True;
 end;

 ///////////////////////////////////////////////
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
IF not DXDraw1.CanDraw Then exit;
DXDraw1.Surface.Fill(9);
DXSPRITEEngine1.Move(1000 Div 60);
DXSpriteEngine1.Dead;
DXSpriteEngine1.Draw;
DXDraw1.Flip;
//Вывод на экран землю и траву
TZemla.Create(DXSpriteEngine1.Engine);
TTrava.Create(DXSpriteEngine1.Engine);
end;

Procedure TDzigit.DoCollision(Sprite:TSprite; var Done:Boolean);
Begin
IF Sprite Is TZemla Then Begin Dead; end;
end;

Procedure TDzigit.DoMove(MoveCount:Integer);
Begin
Inherited DoMove(MoveCount);
//Collision;
IF y>380 then Begin y:=380;end;
y:=y+(100/100)*MoveCount;
end;

procedure TForm1.DXDraw1Initialize(Sender: TObject);
begin
DXTimer1.Enabled:=True;
end;

procedure TForm1.DXDraw1Finalize(Sender: TObject);
begin
DXTimer1.Enabled:=False;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
If Key=vk_Escape Then close;
end;

procedure TForm1.DXTimer1Activate(Sender: TObject);
begin
DXTimer1.Enabled:=True;
end;

procedure TForm1.DXTimer1Deactivate(Sender: TObject);
begin
DXTimer1.Enabled:=False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
TDzigit.Create(DXSpriteEngine1.Engine);
DXDraw1.Initialize;
end;

end.


 
Servelat ©   (2004-08-15 22:06) [1]

Во-первых, IMHO, правила хорошего тона: куча плохо написанного кода прямо в посте не ведет к наглядному пониманию (по крайней мере мною) проблемы. Неужели так сложно закачать на какой-нить сервак zip архив с твоим кодом? В противном случае, я должен создать форму, понакидать на неё компонентов, сделать имена, как твои, подставить все обработчики событий в нужные места, подыскать картинки под твои спрайты, короче куча геморроя, все это чтобы увидеть что к чему. Это сразу отбивает желание рассматривать твою проблему.

Далее по коду:

//Вывод на экран землю и траву
TZemla.Create(DXSpriteEngine1.Engine);
TTrava.Create(DXSpriteEngine1.Engine);

Не правда, тут происходит создание двух объектов, а никак не вывод их на экран (вывод производят строчки
DXSpriteEngine1.Draw;
DXDraw1.Flip;

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


procedure TForm1.DXTimer1Activate(Sender: TObject);
begin
DXTimer1.Enabled:=True;
end;

Глупость, совершенно бессмысленный код. Событие DXTimerActivate происходит при установке его свойства Enabled в True. То есть, эта процедура вызывается тогда, когда DXTimer1.Enabled и так true.

Это и еще несколько ляпсусов наводят на мысль о низкой подготовке тебя в программировании, а соответственно игры тебе писать рано, ничего хорошего из этого не выйдет (IMHO). Прочитай книжку (лучше две) про ООП, напиши несколько утилиток, разберись с понятием объекта, наследования, etc. После этого скорее всего тебя посетит мысль о полной бесполезности кода в твоем первом посте, и ты перепишешь это все нафиг.

ЗЫ Все вышесказанное IMHO, я не хотел никого обидеть.
ЗЗЫ И все же не могу заметить, что "игра" - это слишком громкое название для твоего кода.
ЗЗЗЫ Мой пост можно было сделать куда короче, заменив его емким словом "RTFM".


 
JUS   (2004-08-16 00:27) [2]


> ЗЗЫ И все же не могу заметить, что "игра" - это слишком
> громкое название для твоего
Да, спасибо, согласен

> IMHO
Что значит?


 
JUS   (2004-08-16 00:32) [3]

Да и закрырыв глаза на это кто мне ответит на первый вопрос, уж очень охото всё сразу узнать:)

И что значит
> ЗЫ
?


 
gg_no_re   (2004-08-16 00:35) [4]

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


 
Megabyte-CeerCop ©   (2004-08-16 08:37) [5]

Отвечаю как обратиться к его координатам:
У класса TImageSprite Кроме конструктора есть ещё и процедура doMove Декларируй её и в теле (еённом) Оперируй с опросом клавиш и координатами.


 
NikotiN ©   (2004-08-16 13:02) [6]

Тут не только по ООП книжки надо. Купи себе себе что-то, типа "Программирование" Окулова, кажется... Ну и заодно Библию Разработчика Delphi 4/5/6...

ЗЫ:
Ошибок и недочётов больше строк :)
IF y>380 then Begin y:=380;end;
y:=y+(100/100)*MoveCount;


 
JUS   (2004-08-17 18:31) [7]


> Неужели так сложно закачать на какой-нить сервак zip архив
> с твоим кодом?

Я просто не умею это телать. закидывать на сервак в смысле.


 
Megabyte-Ceercop ©   (2004-08-19 06:52) [8]

[7]
Я тоже неумею на серваки закидывать.
Много раз уже пробовал.

Серьёзно :-|


 
Jus   (2004-08-20 20:36) [9]


> Megabyte-Ceercop ©

Вот нашёл где можно закинуть, толко на неделю или макс на 14 дней.
http://www.webfile.ru/



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
1-1102082863
MegaVolt
2004-12-03 17:07
2004.12.19
Почему один кусок кода работает а второй нет ведь они эквивалентн


8-1092217378
Руслан
2004-08-11 13:42
2004.12.19
Как определить что MediaPlayer закончил проигрывать файл...


1-1102259145
Djon007
2004-12-05 18:05
2004.12.19
на чём пишут проги под плотформу poket pc?


4-1099606582
jek_
2004-11-05 01:16
2004.12.19
WinExec


1-1102086456
Gek1
2004-12-03 18:07
2004.12.19
Dword в Hex





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский