Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.032 c
9-1102065795
lifo
2004-12-03 12:23
2005.02.27
Спрайт


14-1106667413
ali_tash
2005-01-25 18:36
2005.02.27
как заставить windows использовать файл подкачки


3-1106688163
MakedoneZ
2005-01-26 00:22
2005.02.27
Про компонент DBGrid и тип данных Boolean.


3-1107172647
a3a3ello
2005-01-31 14:57
2005.02.27
Глючит TDBgrid


9-1101630474
George
2004-11-28 11:27
2005.02.27
Нужна dll ка





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