![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите со стрельбой:((( немогу блин сделать [Delphi, Windows]
JUS © (2005-11-04 01:33:00)Вариант 1
procedure TPlayer.DoMove(MoveCount:Integer);
begin
...
If IsButton1 in Form1.DXInput.States then begin{5}
ShootBah; // процедура
end;{Bah}
...
end;
procedure TDrob.DoMove(MoveCount:Integer);
begin
case napravlenie of
0 : X := X + 6;
1 : X := X - 6;
end;
If (drob[fdrob].X<0) Or (drob[fdrob].X>1024) Then Begin Dead; fdrob:=fdrob-1; end;
end;
procedure ShootBah;
Begin
fdrob:=fdrob+1;
drob[fdrob]:=Tdrob.Create(Form1.DXSpriteEngine.engine);
drob[fdrob].Image:=Form1.DXImageSnarads.Items.Find('Дробь');
drob[fdrob].Width:=drob[fdrob].Image.Width;
drob[fdrob].Height:=drob[fdrob].Image.Height;
drob[fdrob].X:=Player1.X+8;
drob[fdrob].Y:=Player1.Y+8;
drob[fdrob].Z:=0;
IF LR='R' Then drob[fdrob].napravlenie:=0;
IF LR='L' Then drob[fdrob].napravlenie:=1;
end;
//LR - это в какую сторону смотрит чел
Ну чё не правильно я делаю, как надо? я в тупике блин!":-(((
Help me please!
JUS (2005-11-04 22:00:00) [1]
> Богдан1024 (04.11.05 19:42) [11]
> Координаты предметов не зависят от того с какой стороны
> на них смотришь. Хотя для аркады на одного абсолютно всё
> равно :)
Короче, незнаю о чём ты, но у меня всё ровно! Вопрос закрыт, сделал, всё работает.
Богдан1024 (2005-11-04 19:42:00) [2]Координаты предметов не зависят от того с какой стороны на них смотришь. Хотя для аркады на одного абсолютно всё равно :)
JUS (2005-11-04 15:47:00) [3]
> Лишние вычисления.
подругому никак, а ты как делаеш?)
Богдан1024 (2005-11-04 15:25:00) [4]>Игрок у меня по сути не перемещается по X и Y, а вот остольные обьекты >да, относительно игрока.
Чё, ты каждый раз вычисляешь позицию объектов относительно игрока??? Выходит, объекты, которые впринципе не двигаются могут менять свои координаты. Лишние вычисления.
JUS (2005-11-04 07:11:00) [5]Спасибо, но уже сам разобрался. Вариант1 и Вариант2 отпадает.
JUS (2005-11-04 02:37:00) [6]Привёл два варианта, первый вобще не работает!
Короче, кому лень разбирать код, обьяснить попробую так.
Игрок у меня по сути не перемещается по X и Y, а вот остольные обьекты да, относительно игрока. (когда ходит, падает, ползёт вверх). Если например игрок падает, значит SY:=+8;(ускорения нет!), если стоит SY:=0;
Когда игрок стреляет, то патроны летят уже не зависимо от движения игрока в любую сторону, если даже он падает, то патроны "падают" вместе с ним(не отдаляются вверх) . Как же сделать мне с патронами?
(Код см. выше.)
Еще забыл к коду
procedure TPlayer.DoMove(MoveCount:Integer);
...
scroller;//процедура
end;
В процедуре scrollerописан код по перемещению всех обьектов, вот пример:
procedure Scroller;
var kkk:integer;
begin
For kkk:=1 to fk do Begin Kirp[kkk].X:=Kirp[kkk].X+SX; Kirp[kkk].Y:=Kirp[kkk].Y+SY; end;
For kkk:=1 to fo do Begin Ogon[kkk].X:=Ogon[kkk].X+SX; Ogon[kkk].Y:=Ogon[kkk].Y+SY; end;
For kkk:=1 to fl do Begin lest[kkk].X:=Lest[kkk].X+SX; Lest[kkk].Y:=Lest[kkk].Y+SY; end;
...
Sx:=0;
Sy:=0;
end;
Но сюда же не прилепить TDrob.X:=TDrob.X+SX; TDrob.Y:=TDrob.Y+SY;
А делать по варианту 1см выше, чё то не то.
Помогите разобраться, пацаны!
JUS (2005-11-04 02:21:00) [7]
> grouzd[E]v © (04.11.05 02:14) [5]
> Ну и кто это читать будет?
>
> ---
Написал только необходимое, там ничего сложного!
Значит труба дело, никто не поможет мне!
:-(
grouzd[E]v (2005-11-04 02:14:00) [8]Ну и кто это читать будет?
---
... we are walking on a thin line and you better avoid the risk ...
JUS (2005-11-04 01:53:00) [9]Вобщем, во 2-м варианте патроны летят по Y вместе с Player1.Y почему то, а надо Drob.Y:=Drob.Y+SY;
JUS (2005-11-04 01:46:00) [10]
> //IF SY<>0 Then Y:=Y-SY; /// обратите вниманиеIf (X<10)
> Or (X>1034) Then Dead;
> end;
чуть исправлю
//IF SY<>0 Then Y:=Y-SY; /// обратите внимание
If (X<0) Or (X>1024) Then Dead;
end
извеняюсь)
JUS (2005-11-04 01:44:00) [11]Вариант 2
TDrob=class(TImageSprite) //Дробь
anim:integer;
napravlenie:integer; //L R
public
procedure DoMove (MoveCount:Integer);override;
constructor Create(AParent: TSprite); override;
// procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
end;
If IsButton1 in Form1.DXInput.States then begin{5}
...
{анимация}
...
Tdrob.Create(form1.DXSpriteEngine.engine);
end;
procedure TDrob.DoMove(MoveCount:Integer);
begin
case napravlenie of
0 : X := X + 6;
1 : X := X - 6;
end;
//IF SY<>0 Then Y:=Y-SY; /// обратите вниманиеIf (X<10) Or (X>1034) Then Dead;
end;
Работать работает, но не совсем как надо!
SY- эта переменная нужна для перемещения по Y всех объектов при перемещении игрока по вертикали
SX- аналогично по горизонтали
А как присобачить SXи SYдля дроби? немогу, помогите плиз.
JUS (2005-11-04 01:34:00) [12]Вариант 1
procedure TPlayer.DoMove(MoveCount:Integer);
begin
...
If IsButton1 in Form1.DXInput.States then begin{5}
ShootBah; // процедура
end;{Bah}
...
end;
procedure TDrob.DoMove(MoveCount:Integer);
begin
case napravlenie of
0 : X := X + 6;
1 : X := X - 6;
end;
If (drob[fdrob].X<0) Or (drob[fdrob].X>1024) Then Begin Dead; fdrob:=fdrob-1; end;
end;
procedure ShootBah;
Begin
fdrob:=fdrob+1;
drob[fdrob]:=Tdrob.Create(Form1.DXSpriteEngine.engine);
drob[fdrob].Image:=Form1.DXImageSnarads.Items.Find('Дробь');
drob[fdrob].Width:=drob[fdrob].Image.Width;
drob[fdrob].Height:=drob[fdrob].Image.Height;
drob[fdrob].X:=Player1.X+8;
drob[fdrob].Y:=Player1.Y+8;
drob[fdrob].Z:=0;
IF LR='R' Then drob[fdrob].napravlenie:=0;
IF LR='L' Then drob[fdrob].napravlenie:=1;
end;
//LR - это в какую сторону смотрит чел
Ну чё не правильно я делаю, как надо? я в тупике блин!":-(((
Help me please!