Текущий архив: 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