Главная страница
    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.48 MB
Время: 0.044 c
1-1107960532
arhis
2005-02-09 17:48
2005.02.27
Форма в форме.


6-1102941342
ingine
2004-12-13 15:35
2005.02.27
UDP redirect


14-1107515940
Vaitek
2005-02-04 14:19
2005.02.27
Микрон - это сколько


9-1101142814
DeFenix
2004-11-22 20:00
2005.02.27
Кто нибудь! Как работать с DelphiX?!


3-1107010751
Hort
2005-01-29 17:59
2005.02.27
Добавить запись в базу Interbase





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