FOR-schleife verhält sich im UP anders als im HP!![erledigt]



  • Hallo hab folgendes Problem:
    aber zu erst der Code:

    int main() {
    	init();
        setup();
    	while (!key[KEY_ESC]) {
    
              while (speed_counter>0){
    
              held.neue_pos(feldeigenschaft); 
              [b]//ERRECHNET NEUE POSITION VON OBJEKT    [/b]
              held.avatar_zeichnen(buffer,hintergrund);
              [b]//LÄD OBJEKT 1 IN BUFFER[/b]
    
              npc.avatar_zeichnen(buffer,hintergrund);
              [b]//LÄD OBJEKT 2 IN BUFFER
    [/b]
              feldsetzen(npc,1);//[b]HIER DIE SCHLEIFE[/b]
              [b]/*BELEGT FELD MIT EINER SPERRE, DAMIT OBJEKT 1 NICHT AUF OBJEKT 2 GEZEICHNET WERDEN KANN*/[/b]
              speed_counter --;
              }
    
    		  draw_sprite(screen,buffer,0,0);
    	}
    
    	deinit();
    	return 0;
    }
    END_OF_MAIN()
    
    void feldsetzen(tCharacter test, int s){
    
         test.avatar_zeichnen(buffer,hintergrund);
         [b]for (int k=test.get_x();k<test.get_x()+35;k++){
            for (int l=test.get_y();l<test.get_y()+35;l++){feldeigenschaft[k][l]=s;}
    [/b]
            }
    }
    

    Ich versuche mich an einem kleinen Spiel. die Prozedur "feldsetzen" belegt mein array feldeigenschaften mit 1, d.h das feld ist besetzt. und kann von keinem anderen Objekt besetzt werden.

    Wenn ich den Inhalt der Prozedur in mein HP einfüge, dann
    funktionierts auch.
    Meinen Helden kann man mit den Pfeiltasten lenken.
    Wenn 2 Tasten gedrückt werden bewegt es sich in die Richtung der 2 Taste.

    Wenn ich jedoch alles so lasse wie es oben ist,also in einer Prozudur, dann kann ich ihn nur mit einer Taste steuern. bei der zweiten bewegt er sich gar nicht.

    Wenn ich die Schleife in meiner Prozedur entferne, bewegt es sich ganz normal weiter.(jedoch muss ich das feld ja für andere objekte sperren)
    Deshalb vermute ich, dass mein Problem i wo in der Schleife zu lösen ist.

    Frage: Was fehlt meiner Prozedur?

    Freue mich auf eure antworten.
    Grüße shan



  • Ehrlich gesagt, verstehe ich deinen Code nicht so ganz 😞

    Aber mir fällt folgendes auf:

    Du erstellst hier jedesmal eine Kopie von deinem npc-Objekt.

    void feldsetzen(tCharacter test, int s)
    

    Versuch es mal mit einer Referenz:

    void feldsetzen(tCharacter& test, int s)
    

    Frage: Was fehlt meiner Prozedur?

    Also kurz:
    ein '&' 😉

    Gruß,
    CSpille



  • hi,
    Danke für den Vorschlag. hab das sowohl mit Referenzen als auch mit Zeiger probiert. Funktioniert leider auch nicht.

    Das Problem ist ja, dass ich ohne der Prozedur(also alles ins Hp gepackt)mit mehreren Tasten gleichzeitig steuern kann, aber mit Prozedur nur mit einer.

    Wenn ich die schleife aus der prozedur entferne, funktioniert das wieder.

    Das Problem muss irgendwo in der schleife liegen...

    Grüße shan



  • Es liet am WP



  • CSpille hast du was gegen Behinderte? Oder was soll deine dämliche Signatur?



  • Das mal selbst auszuprobieren ist natürlich schwierig, weil man den Code nicht selbst vorliegen hat.

    Du rufst 2 mal hintereinander avatar_zeichnen für npc auf. Einmal vor der Funktion
    und einmal in der Funktion mit der Kopie von npc in form von test. Gewollt oder passiert das in draw_sprite?
    Hier bin ich übrigens wie CSpille der Ansicht, dass es eine Referenz auch tut.

    Da das nun dein Problem nicht zu beheben scheint, würde mich mal deine Version
    interessieren, wenn du ohne die Procedure arbeitest und alles im HP hast.
    Vielleicht ist dir ein Fehler beim Umbau reingekommen 😉

    Weiterhin wird speed_counter nirgends wieder auf einen Wert größer 0 gesetzt, nachdem er einmal abgelaufen ist. Ist das auch so gewollt?

    Was macht END_OF_MAIN() am Ende ganz unten? 😃



  • rolleyes schrieb:

    CSpille hast du was gegen Behinderte? Oder was soll deine dämliche Signatur?

    Erster Satz der Definition von wikipedia:

    Behinderung bezeichnet die dauerhafte und gravierende Beeinträchtigung der gesellschaftlichen und wirtschaftlichen Teilhabe einer Person, verursacht durch das Zusammenspiel ungünstiger Umweltfaktoren (Barrieren) und solcher Eigenschaften der behinderten Person, die die Überwindung der Barrieren erschweren oder unmöglich machen.

    Ja, Java hat für mich eine "dauerhafte und gravierende Beeinträchtigung", "die die Überwindung der Barrieren erschweren oder unmöglich machen".
    (also deren Verwendung)

    Der "Bruder" drückt die Verwandschaftsbeziehung der objektorientierten Sprachen aus.

    Falls du das Wort "behindert" generell negativ belegst, hast du wohl eher ein Problem mit Behinderten...

    Ich benutze das Wort behindert für eine bewertungsneutrale Darstellung eines Sachverhaltes.



  • BasicMan01 schrieb:

    Das mal selbst auszuprobieren ist natürlich schwierig, weil man den Code nicht selbst vorliegen hat.

    Habs mal hochgeladen, falls ihr das mal probieren möchtet.
    Hab in main.cpp markiert, wo mein problem liegt.
    Link:
    EDIT: link enfernt, da gelöscht.
    Habs mit dev c++ programmiert.

    Du rufst 2 mal hintereinander avatar_zeichnen für npc auf. Einmal vor der Funktion
    und einmal in der Funktion mit der Kopie von npc in form von test. Gewollt oder passiert das in draw_sprite?
    Ausversehen, habs weggemacht...

    Da das nun dein Problem nicht zu beheben scheint, würde mich mal deine Version
    interessieren, wenn du ohne die Procedure arbeitest und alles im HP hast.
    Vielleicht ist dir ein Fehler beim Umbau reingekommen 😉

    Weiterhin wird speed_counter nirgends wieder auf einen Wert größer 0 gesetzt, nachdem er einmal abgelaufen ist. Ist das auch so gewollt?
    ist nicht in dem codeausschnitt zu sehen. ein timer zählt die immer hoch

    Was macht END_OF_MAIN() am Ende ganz unten? 😃
    Vorgabe von Dev

    //MÖGLICHKEIT 1:funktioniert leider nicht mit 2 tasten
              feldsetzen(npczeiger, 1); 
    
             //möglichkeit 2: Funktioniert,
             //alles was in der procedure feldsetzen(npczeiger,1) abläuft hier eingesetzt:
             /* for (int k=npc.get_x();k<npc.get_x()+35;k++){
                 for (int l=npc.get_y();l<npc.get_y()+35;l++){feldeigenschaft[k][l]=1;}
                 } 
    
              */
    

    EDIT: Habe festgestellt, dass Dev C++ veraltet ist!Schade 😞
    Steige auf eine andere Ide um, vielt funktioniert es dann.

    EDIT: mit CodeBlocks funktionierts einwandfrei, beide Varianten.

    Trotzdem Danke an alle.#Shan


Log in to reply