Figuren laufen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Holger123

Betreff: Figuren laufen

BeitragSo, Sep 16, 2007 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mal eine Frage, ich will drei Figuren nacheinander ! von einem, zum anderem Punkt laufen lassen, irgendwie bekomme ich das nicht hin.
Das Problem was ich dabei habe, das entweder der Aufruf des Hintergundes den vorherigen Läufer wieder löscht, oder wenn ich den zweiten Aufruf des Hintergundes deaktiviere man die Laufspuren vom Anfang zum Ende sieht.
Ich möchte das der vorherige Läufer an der Entzone stehen bleibt und zusehen ist wenn der nächste losläuft, am ende sollen alle drei am Ende zu sehen sein.

Ich rufe die Funktion dreimal hintereinander auf, liegt dabei eventuell der Fehler ?

Gehe ich da falsch ran, bitte um Hilfe

Code: [AUSKLAPPEN]


 Graphics 800,600,16,2
 SetBuffer BackBuffer ()

 laufen (250,90)
 laufen (190,130)
 laufen (100,240)

 Function laufen(End_X, End_Y)

 Hintergrund = LoadImage ("karte.bmp")
 Spieler = LoadImage ("figur.bmp")

 DrawBlock Hintergrund,0,0
 
 Start_X=440
 Start_Y=120

 Repeat

 If Start_X < End_X Then Start_X = Start_X + 5
 If Start_Y < End_Y Then Start_Y = Start_Y + 5
 If Start_Y > End_Y Then Start_Y = Start_Y - 5
 If Start_X > End_X Then Start_X = Start_X - 5
 
 DrawBlock Hintergrund,0,0, wenn deaktiviert Laufspuren

 DrawImage spieler,Start_X,Start_Y

 Flip
 
 Until Start_X=End_X And Start_Y=End_Y
 
 
 End Function
    • Zuletzt bearbeitet von Holger123 am So, Sep 16, 2007 23:08, insgesamt einmal bearbeitet

    BigMaexle

    BeitragSo, Sep 16, 2007 22:58
    Antworten mit Zitat
    Benutzer-Profile anzeigen
    Flip und Cls IN die Schleife Wink
    --------------------------------------
    Ich bin unfreiwillig ein Mitglied dieser kapitalistischen Gesellschaft, wo jeder Geldgeile Unternehmer an mein Geld will und ich selbst bei meinen Entscheidungen so gut wie willenlos bin...... und ich bin glücklich drüber
     

    Holger123

    BeitragSo, Sep 16, 2007 23:02
    Antworten mit Zitat
    Benutzer-Profile anzeigen
    Das ist richtig, Flip kommt vor Until..

    Trotzdem funktioniert es nicht, der vorherige Läufer wird beim Start des nächsten Läufer gelöscht und das soll er nicht, er soll an der Entkoordinate weiter zu sehen sein.

    Man kann sich das wie Steine die von der Decke hintereinander fallen vorstellen, wenn der eine unten ist, soll der nächste runter fallen.
     

    Dreamora

    BeitragSo, Sep 16, 2007 23:38
    Antworten mit Zitat
    Benutzer-Profile anzeigen
    Dann brauchst du types wo die koordinaten des jeweiligen läufers und alle anderen relevanten daten drin gespeichert sind, damit du für jeden läufer eigenständige daten speichern kannst
    Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

    LordArtus

    BeitragMo, Sep 17, 2007 0:54
    Antworten mit Zitat
    Benutzer-Profile anzeigen
    Hi,

    je nachdem , was du machen willst , aber das was du machen (so meine Vermutung) willst , liegt an den überzeichnen mit:

    Code: [AUSKLAPPEN]

    DrawBlock Hintergrund,0,0


    mach es einfach weg.

    Falls du es doch mit dem Hintergrund haben willst,mach es so:

    Code: [AUSKLAPPEN]

     Graphics 800,600,16,2
     SetBuffer BackBuffer ()

     Hintergrund = LoadImage ("karte.bmp")
     Spieler = LoadImage ("figur.bmp")

     DrawBlock Hintergrund,0,0

     laufen (250,90)
     laufen (190,130)
     laufen (100,240)

     Function laufen(End_X, End_Y)
     
     Start_X=440
     Start_Y=120

     Repeat

     If Start_X < End_X Then Start_X = Start_X + 5
     If Start_Y < End_Y Then Start_Y = Start_Y + 5
     If Start_Y > End_Y Then Start_Y = Start_Y - 5
     If Start_X > End_X Then Start_X = Start_X - 5
     
     DrawImage spieler,Start_X,Start_Y

     Flip
     
     Until Start_X=End_X And Start_Y=End_Y
     
     
     End Function


    habs nicht getestet , aber müsste funzen.

    MfG

    LordArtus

    Smily

    BeitragMo, Sep 17, 2007 9:52
    Antworten mit Zitat
    Benutzer-Profile anzeigen
    Ich persönlich würde hier von der verwendung einer funktion komplett abraten.. da gibt es sicher bessere methoden das umzusetzen...

    gruß,
    Smily0412

    Edit: Lord Artus, ich kann von hier aus deinen Code nicht testen, aber ich bin mir ziemilch sicher, dass dieser code NICHT so geht wie er soll Wink
    Lesestoff:
    gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

    "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
    stummi.org

    LordArtus

    BeitragMo, Sep 17, 2007 13:11
    Antworten mit Zitat
    Benutzer-Profile anzeigen
    Ja , hast Recht Smily , aber immer hin , müsste das erste laufen und das dritte am Ende zu sehen sein Wink.

    Code: [AUSKLAPPEN]

     Graphics 800,600,16,2
     SetBuffer BackBuffer ()

     Hintergrund = LoadImage ("karte.bmp")
     Spieler = LoadImage ("figur.bmp")

     DrawBlock Hintergrund,0,0

     laufen (250,90)
     laufen (190,130)
     laufen (100,240)
     Flip

     Function laufen(End_X, End_Y)
     
     Start_X=440
     Start_Y=120

     Repeat

     If Start_X < End_X Then Start_X = Start_X + 5
     If Start_Y < End_Y Then Start_Y = Start_Y + 5
     If Start_Y > End_Y Then Start_Y = Start_Y - 5
     If Start_X > End_X Then Start_X = Start_X - 5
     
     DrawImage spieler,Start_X,Start_Y

     Until Start_X=End_X And Start_Y=End_Y
     
     
     End Function


    so denke ich würde man am Ende alles sehen.(Alles ungetestet)

    MfG

    LordArtus
     

    Holger123

    BeitragMo, Sep 17, 2007 13:38
    Antworten mit Zitat
    Benutzer-Profile anzeigen
    Es kann ja auch nicht laufen, schon weil das laden der Bilder nicht in der Funktion steht.
    Vielleicht habe ich mich auch nicht richtig ausgedrückt, es sollen alle Figuren die die Endkoordinate erreicht haben, dort stehen bleiben und zu sehen sein.

    Macht man das mit CLS oder man ruft den Hintergrund nochmal in der Schleife auf, ist der vorherige Läufer wieder verschwunden.

    Trotzdem Danke an alle die sich bemüht haben..

    Vielleicht könnte mir jemand mal den richtigen Weg posten..
    Ich habe mal eine kurze gemalte Animation rangehangen wie ich es eigentlich meine..
    Natürlich soll der lauf gerade sein (x+1 , y+1), nicht solch geeier wie in der Animation
    Ich bin relativ unerfahren mit BB, ich stosse dabei an meine Grenzen. Ausserdem scheint das auch garnicht mal so einfach zu sein mit meiner gewünschten Funktion, weil der Hintergund ja immer wieder neu aufgerufen werden muss um die Laufspuren zu elemenieren und trotzdem dürfen die Läufer an den Entkoordinaten nicht verschwinden. Man müsste dann wohl nach dem Auruf des Hintergundes die Läufer am Ende nochmal zeichen.

    Vielleicht gibt es ja jemanden hier der das drauf hat.

    Danke Holger

    user posted image
     

    Matthias

    BeitragMo, Sep 17, 2007 13:59
    Antworten mit Zitat
    Benutzer-Profile anzeigen
    Hay wie schon einige gesagt haben muss jede peron ihre eigenden daten haben deshalb würde ich das an deine Stelle so machen.

    Code: [AUSKLAPPEN]

    Dim StartX(10),StartY(10)
    For I=0 to 2
        StartX(I)=440
        StartY(I)=120
    next

    DrawBlock Hintergrund,0,0


     laufen (250,90,0)
     laufen (190,130,1)
     laufen (100,240,2)
     Flip

     Function laufen(End_X, End_Y,Mann)
    DrawImage spieler,StartX(Mann),StartY(Mann)

    if StartX(Mann)=End_X and StartY(Mann)=End_Y then return

     If StartX(Mann)< End_X Then StartX(Mann)=StartX(Mann)+5
     If StartY(Mann)< End_Y Then StartY(Mann)=StartY(Mann)+5
     If StartY(Mann)> End_Y Then StartY(Mann)=StartY(Mann)-5
     If StartX(Mann)> End_X Then StartX(Mann)=StartX(Mann)-5
     
    End Function


    So müste es eigentlich klappen. Gruß Matthias.
    • Zuletzt bearbeitet von Matthias am Mo, Sep 17, 2007 14:06, insgesamt einmal bearbeitet

    LordArtus

    BeitragMo, Sep 17, 2007 14:01
    Antworten mit Zitat
    Benutzer-Profile anzeigen
    Also für sowas brauchst du Types , hat schon Dreamora gesagt.
    Types sind für Anfänger nicht so leicht zu verstehen.Aber kannst Dich hier im Forum umschauen , es gibt glaube ein Tutorial für Types.
    Wenn du willst , schreibe ich Dir ein BeispielCode , aber erst heute abend.

    MfG

    LordArtus

    Smily

    BeitragMo, Sep 17, 2007 14:11
    Antworten mit Zitat
    Benutzer-Profile anzeigen
    LordArtus hat Folgendes geschrieben:
    Also für sowas brauchst du Types , hat schon Dreamora gesagt.
    Types sind für Anfänger nicht so leicht zu verstehen.Aber kannst Dich hier im Forum umschauen , es gibt glaube ein Tutorial für Types.
    Wenn du willst , schreibe ich Dir ein BeispielCode , aber erst heute abend.

    MfG

    LordArtus


    Und bitte, bitte teste sie in zukunft, bevor du hier das nächste mal einen Code Postest.... der Zweite Code ist nämlich genauso nutzlos wie der erste... Rolling Eyes

    Und nochmal mit Nachdruck... hier sollten keine Funktionen verwendet werden...

    ich würde das so machen (Bitte verzeiht mir meinen etwas eigenwilligen Pseudocode... allerdings habe ich erstens hier kein blitzbasic und zweitens will ich hier niemanden das denken vollends abnehmen... ich will nur die richtung vorgeben)
    (Variable L ist die Figur, die gerade läuft)

    Code: [AUSKLAPPEN]

      allgemeine wichtige dinge (Graphics, Bilder laden etc.)
      Für Figuren 1-3 start (bzw aktuelle) und endposition vorgeben (Am besten in einem Type.. wenn du weniger erfahren bis solltest du es erstmal mit Dims versuchen)
      L=1
      Tue
          Figur L läuft ein kleines stück nach rechts.
          Wenn Figur L das ziel erreich hat dann L+1
         
          Alles zeichnen.
      Bis irgendwas


    gruß,
    Smily0412
    Lesestoff:
    gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

    "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
    stummi.org
     

    Matthias

    BeitragMo, Sep 17, 2007 14:40
    Antworten mit Zitat
    Benutzer-Profile anzeigen
    So der Code Functioniert aber fehlerfrei.



    Code: [AUSKLAPPEN]

    Graphics 800,600,32,2
    Dim Lauf_X#(20),Lauf_Y#(20)
    For I=0 To 2
        Lauf_X(I)=440
        Lauf_Y(I)=120
    Next




    SetBuffer BackBuffer()
    Repeat
    Cls

     laufen (250,90,0,3)
     laufen (190,130,1,2)
     laufen (100,240,2,3)

    Flip

    Until KeyDown(1)=1
    End

    Function Laufen(End_X,End_Y,Mann,Speed#)


    EX=Lauf_X(Mann)-End_X
    EY=Lauf_Y(Mann)-End_Y
    If Abs(EX)+Abs(EY)=>Speed Then
    Winkel#=ATan2(EX,EY)+180

    Lauf_X(Mann)=Lauf_X(Mann)+Sin(Winkel)*Speed
    Lauf_Y(Mann)=Lauf_Y(Mann)+Cos(Winkel)*Speed


    end if
    Plot End_X,End_Y
    Oval Lauf_X(Mann)-3,Lauf_Y(Mann)-3,5,5
    End Function
     

    Holger123

    BeitragMo, Sep 17, 2007 15:06
    Antworten mit Zitat
    Benutzer-Profile anzeigen
    Danke für eure Tips, ich werde mich dann wohl mal weiter mit den Types beschäftigen müssen.
    Ich hätte nicht gedacht, das für solche kleine Funktion doch ein erheblicher Aufwand betrieben werden muss.

    Gruss Holger
     

    Dreamora

    BeitragMo, Sep 17, 2007 15:46
    Antworten mit Zitat
    Benutzer-Profile anzeigen
    Muss auch nicht.
    Types sind kein erheblicher Aufwand sondern die einzig sinnvolle Art um Datenblöcke zu handhaben, wenn man für einzelne Dublikate eines Objektes "dublikatspezifische Daten" (Position, Animationsframe etc) speichern will.

    Ein Type ist dabei nichts anderes als ein schöner nutzbarer Speicherblock (sprich anstatt das du einzelne Adressen angeben musst, macht der Type das für dich wenn du auf ein Field zugreifst).
    Ein weiterer vorteil ist, dass man durch alle Types eines bestimmten Typ durchloopen kann durch for a.Type = each Type, was in deinem Fall gewiss auch noch von Vorteil sein wird Smile
    Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

    Neue Antwort erstellen


    Übersicht BlitzBasic Beginners-Corner

    Gehe zu:

    Powered by phpBB © 2001 - 2006, phpBB Group