Kleines Spiel



  • Morgen weiss wer wie man bestimmen kann wie schnell sich ein Bild über die Form bewegen soll ?

    So bewegt sich das Bild zwar schneller aber die Bewegungen sehen so hakelig aus und man kann dadurch das Bild nicht mehr so genau Steuern.

    Kleines beispiel was ich genau meine:

    O = Figur :: = Loch im Boden

    Wenn man jetzt z.b. die Taste drückt und der 2 Pixel direkt nach rechts rückt wäre es ja nicht möglich z.b. Punkt genau vor dem Loch stehen zu bleiben die Figur würde also hereinfallen.

    O ::

    void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
    
            if (Key == VK_LEFT)
            {
             static int i;
    
              i =  Image1->Left;
              i--;
    
              Edit1->Text = i;
              Image1->Left = i -2 ;
    
            }
    
    }
    


  • Hallo,

    meine Idee wäre, das ganze mit TTimer zu steuern.

    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    Form1->DoubleBuffered = true; // damit es nicht so ruckelt
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
    if (Key == VK_LEFT)
            Timer1->Enabled = true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    static int i;
    
    i =  Image1->Left;
    i--;
    
    Image1->Left = i -2 ;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
    if (Key == VK_LEFT)
            Timer1->Enabled = false;
    }
    //---------------------------------------------------------------------------
    

    Entsprechend des Intervals des Timer, bewegt sich das Bild dann schnell oder langsam.

    Aber vielleicht gibt es da noch schönere Lösungen 🙂

    LG, Micha

    //Edit: hmm eigentlich ist das Blödsinn. Das Problem mit der Position wird ja dadurch nicht behoben. Wenn du nicht -1 sondern z.B. -5 rechnen würdest, würde sich das Bild auch schneller bewegen, wobei dann eben wie du schon sagtest die Position ungenauer wird.



  • Mhhm mit der Steuerung muss ich dann wohl noch mal schauen wie ich das verbessere.

    Aber nun hab ich ein neues Problem.

    Ich hab auf meiner Form eine Spielfigur und ein Bild von einem Stein xD

    Wenn die Figur gegen den Stein läuft soll eine MessageBox kommen aber irgendwie krieg ich das einfach nicht geregelt damit.

    Hier meine bisherigen versuche welche aber alle nicht Funktionierten _

    if (Image1->Left == Image2->Left && Image1->Top == Image2->Top)
            {
            MessageBox(0,"ok","ok",0);
            }
    
            if (Image1->Left ==344 && Image1->Top == 232)
            {
             MessageBox(0,"ok","ok",0);
            }
    


  • Hallo
    versuch doch mal deine Ifs zu klammern ...((h==h)&((uz==uz))....



  • rudiM schrieb:

    versuch doch mal deine Ifs zu klammern ...((h==h)&((uz==uz))....

    Überflüssig.

    @Image1: Wo steht dieser Code?
    Bei deiner Abfrage müßtest du außerdem schon pixelgenau treffen. Falls du einen gewissen Überschneidungsbereich willst, mußt du die Überprüfung schon entsprechend umbauen.

    Edit: Achja, und du solltest beim ersten Parameter von MessageBox() ein gültiges Fensterhandle übergeben.



  • Was soll das bringen wo ist der Unterschied ?

    if ( (Image1->Left == Image2->Left) && (Image1->Top == Image2->Top) )
            {
             MessageBox(0,"ok","ok",0);
            }
    
    if ( Image1->Left == Image2->Left && Image1->Top == Image2->Top )
            {
             MessageBox(0,"ok","ok",0);
            }
    

    Naja habs einfach mal getestet aber funktionierte auch nicht. 😞



  • if (( (Image1->Left - Image2->Left ) < 3) &&(( Image1->Top - Image2->Top)<3) )
    {
    MessageBox(0,"ok","ok",0);
    }



  • Zu viel in LISP programmiert? :p



  • rudiM schrieb:

    if (( (Image1->Left - Image2->Left ) < 3) &&(( Image1->Top - Image2->Top)<3) )
    {
    MessageBox(0,"ok","ok",0);
    }

    Funktioniert auch nich ...


Anmelden zum Antworten