Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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.045 c
1-1145892988
Meganop
2006-04-24 19:36
2006.06.04
Вызов chm файла из Delphi


2-1147673825
ANB
2006-05-15 10:17
2006.06.04
Можно ли использовать в IdPOP3 идентификатор писем Message-ID ?


1-1146411776
V0va
2006-04-30 19:42
2006.06.04
Как узнать, что запущено полноэкранное приложение?


15-1146924039
User_OKA
2006-05-06 18:00
2006.06.04
Коммутатор


15-1146851737
Gero
2006-05-05 21:55
2006.06.04
Adobe Photoshop SDK





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