Opóźnienie w builder C++ ?

0

Witam,
chciałem napisać coś ala Galaxian game - tak jak była kiedys na pegasusa. Napsiałem to i mam jakieś dziwne opóźnienie tzn. pocisk wystrzelony przez statek zbija ufo i teraz: ufo znika po jakims czasie od uderzenia pocisku, a pocisk przelatuje przez ufo i znika dopiero duzo wyzej( mam w kodzie linijki, ktore odpowiadaja za wylaczenie timera pocisku od razu po wykryciu kolziji pocisk-ufo). Czy ktos wie czemu tak sie dzieje ?

 
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

int x_ufo=+20;
int y_ufo=+40;
int zbite=0;

bool kolizja(TImage * pocisk, TImage *ufo)
{
    if(pocisk->Left>ufo->Left &&
       pocisk->Left+pocisk->Width<ufo->Left+ufo->Width &&
       pocisk->Top<=ufo->Top-ufo->Height) return true;
       else return false;

}

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::timer_ufoTimer(TObject *Sender)
{
        ufo1->Left+=x_ufo;
        ufo2->Left+=x_ufo;
        ufo3->Left+=x_ufo;
        ufo4->Left+=x_ufo;
        ufo5->Left+=x_ufo;
        ufo6->Left+=x_ufo;
        ufo7->Left+=x_ufo;
        ufo8->Left+=x_ufo;
        ufo9->Left+=x_ufo;
        ufo10->Left+=x_ufo;
        ufo11->Left+=x_ufo;
        ufo12->Left+=x_ufo;

        // odbij od prawej

        if(ufo5->Left+ufo5->Width>tlo->Left+tlo->Width-20)
        {      x_ufo=-x_ufo;
                ufo1->Top+=y_ufo;
                ufo2->Top+=y_ufo;
                ufo3->Top+=y_ufo;
                ufo4->Top+=y_ufo;
                ufo5->Top+=y_ufo;
                ufo6->Top+=y_ufo;
                ufo7->Top+=y_ufo;
                ufo8->Top+=y_ufo;
                ufo9->Top+=y_ufo;
                ufo10->Top+=y_ufo;
                ufo11->Top+=y_ufo;
                ufo12->Top+=y_ufo;}

        //odbij od lewej

        if(ufo1->Left<tlo->Left+20)
        {      x_ufo=-x_ufo;
                ufo1->Top+=y_ufo;
                ufo2->Top+=y_ufo;
                ufo3->Top+=y_ufo;
                ufo4->Top+=y_ufo;
                ufo5->Top+=y_ufo;
                ufo6->Top+=y_ufo;
                ufo7->Top+=y_ufo;
                ufo8->Top+=y_ufo;
                ufo9->Top+=y_ufo;
                ufo10->Top+=y_ufo;
                ufo11->Top+=y_ufo;
                ufo12->Top+=y_ufo;
                }
         // kolizja-po kolizji wylaczamy timer pocisku,ustawiamy pocisk na niewidoczny i ustawiamy go na wysokosci dziobu statku, ustawiamy ufo na niewidoczne)

         if(kolizja(pocisk,ufo1)&&ufo1->Visible==true)
         {
           ufo1->Visible=false;pocisk->Visible=false; zbite++;timer_pocisk->Enabled=false;pocisk->Top=408;
         }
         if(kolizja(pocisk,ufo2)&&ufo2->Visible==true)
         {
           ufo2->Visible=false;pocisk->Visible=false; zbite++;timer_pocisk->Enabled=false;pocisk->Top=408;
         }
         if(kolizja(pocisk,ufo3)&&ufo3->Visible==true)
         {
           ufo3->Visible=false;pocisk->Visible=false; zbite++;timer_pocisk->Enabled=false;pocisk->Top=408;
         }
         if(kolizja(pocisk,ufo4)&&ufo4->Visible==true)
         {
           ufo4->Visible=false;pocisk->Visible=false; zbite++;timer_pocisk->Enabled=false;pocisk->Top=408;
         }
         if(kolizja(pocisk,ufo5)&&ufo5->Visible==true)
         {
           ufo5->Visible=false;pocisk->Visible=false; zbite++;timer_pocisk->Enabled=false;pocisk->Top=408;
         }
         if(kolizja(pocisk,ufo6)&&ufo6->Visible==true)
         {
           ufo6->Visible=false;pocisk->Visible=false; zbite++;timer_pocisk->Enabled=false;pocisk->Top=408;
         }
         if(kolizja(pocisk,ufo7)&&ufo7->Visible==true)
         {
           ufo7->Visible=false;pocisk->Visible=false; zbite++;timer_pocisk->Enabled=false;pocisk->Top=408;
         }
         if(kolizja(pocisk,ufo8)&&ufo8->Visible==true)
         {
           ufo8->Visible=false;pocisk->Visible=false; zbite++;timer_pocisk->Enabled=false;pocisk->Top=408;
         }
         if(kolizja(pocisk,ufo9)&&ufo9->Visible==true)
         {
           ufo9->Visible=false;pocisk->Visible=false; zbite++;timer_pocisk->Enabled=false;pocisk->Top=408;
         }
         if(kolizja(pocisk,ufo10)&&ufo10->Visible==true)
         {
           ufo10->Visible=false;pocisk->Visible=false; zbite++;timer_pocisk->Enabled=false;pocisk->Top=408;
         }
         if(kolizja(pocisk,ufo11)&&ufo11->Visible==true)
         {
           ufo11->Visible=false;pocisk->Visible=false; zbite++;timer_pocisk->Enabled=false;pocisk->Top=408;
         }
         if(kolizja(pocisk,ufo12)&&ufo12->Visible==true)
         {
           ufo12->Visible=false ;pocisk->Visible=false; zbite++;timer_pocisk->Enabled=false;pocisk->Top=408;
         }


}
//---------------------------------------------------------------------------
void __fastcall TForm1::statek_lewoTimer(TObject *Sender)
{
        if(statek->Left>tlo->Left+5)statek->Left-=10;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::statek_prawoTimer(TObject *Sender)
{
        if(statek->Left+statek->Width+6<tlo->Left+tlo->Width)
        statek->Left+=10;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
        if(Key==VK_LEFT) statek_lewo->Enabled=true;
        if(Key==VK_RIGHT) statek_prawo->Enabled=true;
        if(Key==VK_SPACE) {        if(pocisk->Top-pocisk->Height<tlo->Top-5)
        {pocisk->Visible=false;
         timer_pocisk->Enabled=false;
         pocisk->Top= 408;} else {if(pocisk->Top==408)pocisk->Left=statek->Left+36;timer_pocisk->Enabled=true;}}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
        if(Key==VK_LEFT) statek_lewo->Enabled=false;
        if(Key==VK_RIGHT) statek_prawo->Enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::timer_pociskTimer(TObject *Sender)
{       pocisk->Visible=true;
        pocisk->Top-=4;

}
//---------------------------------------------------------------------------

Czy moze wrzucic cały program na serwer gdzie ?
Z Gory dziekuje za pomoc. Jezeli ten watek powinien byc w dziale newbie to prosze o przesuniecie.

0

No zgadłeś, spoko to dopiero poczatki, pozniej sie jakos dowiem jak to powinno byc, na razie mam problem z tym opóźnieniem dziwnym i nie wiem z czego to wynika. Moge jedynie przypuszczac ze z timerów ... ale nawet jakby to było to to i tak póki co nie wiem jak to naprawic.

0

Najlepiej tutaj wrzucić: http://przeklej.org/
I pierwsze co mi przychodzi do głowy, to zwiększenie częstotliwości sprawdzania zestrzelenia przez timera.

0

No zwiekszylem interwał, ale problem dalej ten sam. To chyba jednak musi byc wina kodu ...
http://przeklej.org/file/KxEtPB/Galaxian.rar

1 użytkowników online, w tym zalogowanych: 0, gości: 1