Форум: "Игры";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
ВнизПомогите со стрельбой:((( немогу блин сделать Найти похожие ветки
← →
JUS (2005-11-04 01:33) [0]Вариант 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 01:34) [1]Вариант 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 01:44) [2]Вариант 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:46) [3]
> //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:53) [4]Вобщем, во 2-м варианте патроны летят по Y вместе с Player1.Y почему то, а надо Drob.Y:=Drob.Y+SY;
← →
grouzd[E]v © (2005-11-04 02:14) [5]Ну и кто это читать будет?
---
... we are walking on a thin line and you better avoid the risk ...
← →
JUS (2005-11-04 02:21) [6]
> grouzd[E]v © (04.11.05 02:14) [5]
> Ну и кто это читать будет?
>
> ---
Написал только необходимое, там ничего сложного!
Значит труба дело, никто не поможет мне!
:-(
← →
JUS (2005-11-04 02:37) [7]Привёл два варианта, первый вобще не работает!
Короче, кому лень разбирать код, обьяснить попробую так.
Игрок у меня по сути не перемещается по 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 07:11) [8]Спасибо, но уже сам разобрался. Вариант1 и Вариант2 отпадает.
← →
Богдан1024 (2005-11-04 15:25) [9]>Игрок у меня по сути не перемещается по X и Y, а вот остольные обьекты >да, относительно игрока.
Чё, ты каждый раз вычисляешь позицию объектов относительно игрока??? Выходит, объекты, которые впринципе не двигаются могут менять свои координаты. Лишние вычисления.
← →
JUS (2005-11-04 15:47) [10]
> Лишние вычисления.
подругому никак, а ты как делаеш?)
← →
Богдан1024 (2005-11-04 19:42) [11]Координаты предметов не зависят от того с какой стороны на них смотришь. Хотя для аркады на одного абсолютно всё равно :)
← →
JUS (2005-11-04 22:00) [12]
> Богдан1024 (04.11.05 19:42) [11]
> Координаты предметов не зависят от того с какой стороны
> на них смотришь. Хотя для аркады на одного абсолютно всё
> равно :)
Короче, незнаю о чём ты, но у меня всё ровно! Вопрос закрыт, сделал, всё работает.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.035 c