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

Вниз

Пожалуйста посмотрите на код и скажите, что здесь неправильно   Найти похожие ветки 

 
Xenon   (2004-11-27 23:38) [0]

Люди мне кто-нибудь толково может объяснить про пулю, а то я вообще тут завис.
Вот есть: - tplayer- это плеер
                - tpula -  снаряд
                - nap: integer; – направление плеера ( в игре их всего четыре: вверх, вниз, влево, вправо);
                - pol: integer; -это направление пули при полете
Вот есть код :
Создание пули :
   constructor tpula.Create(aparent:tsprite);
begin
inherited Create(aparent);
randomize;
Image :=form1.dximagelist1.Items.Find("pula");
X :=ox  ; //ox –это Х плеера
y:=oy; // oy – это Y плеера
z:=10;
AnimCount :=0;
AnimLooped :=true;
AnimStart:=0;
Collisioned :=true;
width:=32;
height:=32;
end;

……………..
if isup in form1.dxinput1.states then begin
nap :=1 ;(плеер смотрит вверх )
animstart:=0;( загружаем из ленты соответствующий рисунок)
y:=y-5;
end;

if isdown in form1.dxinput1.states then begin
nap :=2 ;(плеер смотрит вверх )
animstart:=1;( загружаем из ленты соответствующий рисунок)
y:=y+5;
end;

if isleft in form1.dxinput1.states then begin
nap :=3 ;(плеер смотрит вверх )
animstart:=2;( загружаем из ленты соответствующий рисунок)
x:=x-5;
end;

if isright in form1.dxinput1.states then begin
nap :=4 ;(плеер смотрит вверх )
animstart:=4;( загружаем из ленты соответствующий рисунок)
x:=x+5;
end;

Я расписываю все так подробно потому что я в растерянности. То, что я писал это движение tplayer’а  
if isbutton1 in form1.dxinput1.states then begin
tpula.create(form1.dxspriteengine1.engine);
end;
А вот  по этому куску вопрос он правильный или нет
или все-таки надо делать так:

if isbutton1 in form1.dxinput1.states then begin
with Tpula.Create(DXSpriteEngine1.Engine) do  
            begin
              Image := form1.DXImageList1.Items.Find("pula");
              Width := 32;
              Height := 32;
              X := ox;  
              Y := oy;
              Z := 2;
            pol:=nap;// то есть здесь я выбираю направление полета пули то есть в ту же сторону куда смотрит плеер
 PixelCheck := true;
            end;
            end;end;
procedure tsnow.DoMove(movecount:integer);
begin
case pol of
   1 : X := X - 5;
   2 : X := X + 5;      //движение пули в определенную сторону
   3 : Y := Y - 5;
   4 : Y := Y + 5;
 end;
……………………………….

Так вопрос вот в чем почему когда я делаю выстрел пуля летит куда надо, но только стоит мне повернуть в другую сторону как пуля меняет свое направление в ту же т.е я выстрелил вправо  повернул player’a влево и пуля полетела влево. Ответьте пожалуйста на вопрос, а то уже надоело как ни странно над таким легким вопросом бится ! 1НЕДЕЛЮ.!!! Помогите плз. C ув Xenon


 
XProger ©   (2004-11-28 01:17) [1]

tsnow - чё за?

if isbutton1 in form1.dxinput1.states then
with Tpula.Create(DXSpriteEngine1.Engine) do  
begin
Z := 2;
pol := nap;
PixelCheck := true;
end;


 
Xenon   (2004-11-28 12:57) [2]

Не Tsnow это я перепутал а Tpula.
Ну сделал а толку та же фигня. Выстрелил, все нормально пуля летит куда надо, повернулся выстрелил предыдущая пуля полетела в другую сторону


 
Servelat ©   (2004-11-28 13:08) [3]


> if isup in form1.dxinput1.states then begin
> nap :=1 ;(плеер смотрит вверх )
> animstart:=0;( загружаем из ленты соответствующий рисунок)
> y:=y-5;
> end;
>
> if isdown in form1.dxinput1.states then begin
> nap :=2 ;(плеер смотрит вверх )
> animstart:=1;( загружаем из ленты соответствующий рисунок)
> y:=y+5;
> end;
>
> if isleft in form1.dxinput1.states then begin
> nap :=3 ;(плеер смотрит вверх )
> animstart:=2;( загружаем из ленты соответствующий рисунок)
> x:=x-5;
> end;
>
> if isright in form1.dxinput1.states then begin
> nap :=4 ;(плеер смотрит вверх )
> animstart:=4;( загружаем из ленты соответствующий рисунок)
> x:=x+5;
> end;

Вот эта часть у тебя все еще конструктор пули, или что-то другое уже? Выложи куда-нить код файлом, а то мало что понятно...


 
.cpp   (2004-11-28 20:08) [4]

><enon неделя конечно очень мало, будь готов на большее...

Почему ты задаешь одно направление для POL, а при сравнении в методе TPula.DoMove() задаешь противоположное направление. Например:
---------------------

...
if isUp ... NAP := 1;  // ВВЕРХ, Т.Е. Y := Y-5
...
POL := NAP;
...
потом в методе TPula.DoMove() делаешь ошибочные направления патрона:
...
1: X := X-5;
А надо Y := Y-5;
---------------------
И так у тебя для других POL направления неправильно заданы. Конечно пуля не так лететь будет.
Исправленный метод TPula.DoMove() будет выглядеть так:
---------------------

procedure tsnow.DoMove(movecount:integer);
begin
case pol of
  1 : Y := Y - 5;
  2 : Y := Y + 5;      //движение пули в определенную сторону
  3 : X := X - 5;
  4 : X := X + 5;
end;


 
TButton ©   (2004-11-28 21:50) [5]


> повернулся выстрелил предыдущая пуля полетела в другую сторону

вот! вот где корень твоих бед! вот где обитель зла.
предыдущая пуля поменяла направление после того как ты выстрелил.
копать здесь.


 
Megabyte-ceercop ©   (2004-11-29 06:25) [6]

Проверь нет ли у тебя глобальных переменных с именем pol ?
Или свойств с темже именем например у Плайера?

Если нет, то возможно переменная pol ассигнуется на переменную nap.

Исправь креатер:

> Я расписываю все так подробно потому что я в растерянности.
> То, что я писал это движение tplayer’а  
> if isbutton1 in form1.dxinput1.states then begin
> tpula.create(form1.dxspriteengine1.engine);
> end;
> А вот  по этому куску вопрос он правильный или нет

> или все-таки надо делать так:

конечно так!

Если и это не поможет, то ещё добавь следующее.
Объяви временную локальную переменную в процедуре, котороая будет уничтожаться при выходе из неё. Например var tmp : integer;.

> if isbutton1 in form1.dxinput1.states then begin

> with Tpula.Create(DXSpriteEngine1.Engine) do  
>             begin
>               Image := form1.DXImageList1.Items.Find("pula");
>               Width := 32;
>               Height := 32;
>               X := ox;  
>               Y := oy;
>               Z := 2;
              tmp := nap;
>              pol:=tmp;
//Это должно избавить от глюка                      
> полета пули то есть в ту же сторону куда смотрит плеер
>  PixelCheck := true;
>             end;



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

Текущий архив: 2005.02.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
4-1105420792
leonidus
2005-01-11 08:19
2005.02.27
Как определить язык Windows


14-1107772094
АлексейК
2005-02-07 13:28
2005.02.27
Построение отчетов


1-1108477450
Pyro Sun
2005-02-15 17:24
2005.02.27
Различия Delphi Personal и Professional


3-1106992531
Patrick
2005-01-29 12:55
2005.02.27
Создать запрос


1-1107872610
Zhekson
2005-02-08 17:23
2005.02.27
Контурные карты