Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.19;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
14-1101895272
АлексейК
2004-12-01 13:01
2004.12.19
Win2003Server


1-1102144639
Gek1
2004-12-04 10:17
2004.12.19
Помогите разобраться со строкой кода


4-1099556443
Alexis
2004-11-04 11:20
2004.12.19
Модальный диалог на API


14-1100500058
Cobalt
2004-11-15 09:27
2004.12.19
Больные депутаты


3-1100631765
dUM
2004-11-16 22:02
2004.12.19
Сортировка базы + редактирование