forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Баг при стельбе из турели (http://forum.boolean.name/showthread.php?t=3134)

Atomikc 09.04.2007 12:16

Баг при стельбе из турели
 
:SOS: Значит, есть у меня авианосец, и на нём 3 турели. У каждой турели 7 анимаций (Взависимости от угла их поворота). Лень было мудиться с вращением :). Из каждой турельки вылетают пули. И я нашёл баг. При определённом угле стрельбы не равном 90 градусов вылетает по 2, затем по 3 итд. пули. Помогите кто чем может.
Если стоит не MouseDown(1) а Mousehit(1) то такой проблем не возникает. Но каждый раз нажимат кнопку мышы очень неудобно.
вот код
Код:

.....
Type pula
    Field xp#,yp#
    Field image
    Field frame
    Field ide
End Type
......
deletpula =0
Repeat
Cls

If MouseDown(1)
deletpula =1
For id=0 To 2
pula.pula=New pula
pula\xp=100
pula\yp=200
pula\image=LoadAnimImage("pul.png",17,17,0,2)
pula\frame= 3
pula\ide= id

If id=0
pula\xp=pula\xp-32
pula\yp=pula\yp-37
EndIf
If id=1
pula\xp=pula\xp+11
pula\yp=pula\yp-41
EndIf
If id=2
pula\xp=pula\xp+55
pula\yp=pula\yp-44
EndIf

If ka=0 Then pula\frame=0
If ka=1 Then pula\frame=1

If ka=0 Then vx=-10
If ka=1 Then vx=-7.8

If ka=0 Then vy=-5
If ka=1 Then vy=-8
Next

EndIf

For pula.pula = Each pula 
pula\yp=pula\yp+vy
pula\xp=pula\xp+vx
  If pula\yp <= 30
        Delete pula
        deletpula =0
    Else   
    DrawImage(pula\image, pula\xp, pula\yp,pula\frame)

    EndIf
Next


mr.DIMAS 09.04.2007 17:02

Re: Баг при стельбе из турели
 
Наверно усе потому что МоусеДаун создает много пуль за время пока зажата кнопка мыши, а МоусеХит одну пулю за оно нажатие кнопки мыши. Навено так, а мож и нет

mr.DIMAS 09.04.2007 17:03

Re: Баг при стельбе из турели
 
А еще будет лучше чтобы ты выложил исходник чтобы потестить и посмотреть как там что стреляется и т.д

Atomikc 09.04.2007 19:28

Re: Баг при стельбе из турели
 
у меня функция есть, что если нажать грызуна, то следующяя пуля вылетит только тогда, когда та пуля уничтожится:
Код:

....
deletpula =0
Repeat
Cls

If MouseDown(1)
deletpula =1
...
If pula\yp <= 30
        Delete pula
        deletpula =0
    Else   
    DrawImage(pula\image, pula\xp, pula\yp,pula\frame)
EndIf

Да, и ещё. такой глюк возникает, только если начать стрелять под каким то углом.

Atomikc 09.04.2007 20:21

Re: Баг при стельбе из турели
 
Всё. Нашол багу. Оказывается, если пули летят под углом, они при долетая до нужной координаты они уничтожаются не сразу, а по очереди. ит ем самым когда уничтожается 1 из 3-х пуль, возможен выстрел, долетает вторая и происходит другой, и так далее. В итоге функция начинает выполняться не 1 а несколько раз.


Часовой пояс GMT +4, время: 10:20.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot