Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.01.2011, 12:11

Luftsprung in 2D

hallo, ich habe mal wieder ein kleines problem.

in meinem 2d sidescoller game komme ich bei meinem doppelsprung nicht weiter.

der sprung wird ausgeführt und ich erreiche einen bestimmten koordinatenpunkt Y. x bleibt ja unverändert. nur hab ich jetzt das kleine problem das ich mit dem ersten 50pixel höhe erreichen möchte und mit dem zweiten sprung 100 pixel und da happerts gerade..ich zeig euch mal meinen code vom jump

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
if(jumping1 == TRUE) {      //player auf grid bewegen (unabhängig vom scrolling)
    //jump_status: 0 kein sprung, 1-hoch+, 2-runter, 3-hoch++
        if (jump_status == 4)   {  
            jump_status = 1;            
            run.setVisible(FALSE);      
            jump.setVisible(TRUE);
            jump.setAnim(RES_Jump_01_PNG, JumpAnimTable,ARRAY_LENGTH(JumpAnimTable),TRUE);   
            printf("hoch\n");
        }                       

        jump.updateAnim();
        if(jump_status == 1) {
            runY -= 10; //geschwindigkeit mit der der player aufsteigt
            if(runY < 222) {

                    if(runY < 180) { //höhe des sprungs (koordninate y (oben ist 0 unten ist 320)
                        jump_status = 3;
                        SoundPlay(JumpSound); //spielt jumpsound.snd ab sofern der koordinatenpunkt erreicht ist, muss noch angepasst werden
                        printf("oben1\n");

                                if(jump_status == 3) {
                                    runY -= 10; //geschwindigkeit mit der der player aufsteigt
                                    if(runY < 50) {

                                    //if(runY < 0) { //höhe des sprungs (koordninate y (oben ist 0 unten ist 320)
                                    //  jump_status = 2;
                                    //  SoundPlay(JumpSound); //spielt jumpsound.snd ab sofern der koordinatenpunkt erreicht ist, muss noch angepasst werden
                                    //  printf("oben2\n");
                                    }
                                    }
                    }
            }
        }
        
        if(jump_status == 2) {
            runY += 8; //geschwindigkeit mit der der player abfällt
            if(runY > 145) { //koordinatenpunkt y worauf der player wieder landet nach dem sprung
                jumps = 2;
                jumping1 = FALSE;
                jump_status = 0;
                run.setVisible(TRUE);  
                jump.setVisible(FALSE); 
                printf("runter\n");
            }
        }

        jump.moveTo(runX, runY);    

        }
}
        
        
    

//--------------------------------
int OnTouchArea(int juTou, int event, int x, int y) {   
event == TOUCH_RELEASE;
JumpSound = SoundAdd("Sounds/JumpSound.snd");
    if(/*juid*/ juTou == 0 && jumps > 0) {
            jumps--;
            jump_status = 4;        // mj 1 -> 3
            jumping1 = TRUE;
            printf("JumpStatus = 1 \n");
        }
        //jumping2 = 2;
        //jumping3 = 3;
//  }
    return 0;
}

2

27.01.2011, 12:49

Hallo Waldfee,

wo genau "haperts" denn da, also was klappt nicht?

Warum kannst du nicht einfach eine Variable anlegen iJumps diese auf null setzen und bei einem Sprung erhöhen. Solange die dein Limit (bei einem Doppelsprung also 2) noch nicht erreicht hat lässt du weitere Sprünge zu (auch in der Luft), ansonsten nicht. Beim Landen auf dem Boden einfach wieder auf null zurücksetzen.

Oder habe ich dein Problem nicht verstanden?

Gruß
SaRu_

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

27.01.2011, 12:56

Mit physikalischer Berechnung ließe sich der gesamte Code kürzen zu:

Y = Start.Y + ( StartSpeed - 0.5 * Gravity * DeltaTime ) * DeltaTime

Der gesuchte Parameter zum Ändern der Sprunghöhe wäre hierbei StartSpeed.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

4

27.01.2011, 13:04

mhh nein nein..mein problem ist, das ich jumps-- runtersetze pro sprung um 1 ganz klar...das funktioniert soweit auch, nur die höhe des ersten sprungs soll maximal 150pixel haben, und beim ausführen des zweiten sprungs im ersten soll eine maximale höhe von 100 erreicht werden..(wir vergessen nicht das oben 0 und unten 320 ist ^^)

und wie schick die physikformeln auch sind..die wollte ich bei einem billigen jump n run 2d sidescroll nicht nutzen..^^

5

27.01.2011, 13:28

die wollte ich bei einem billigen jump n run 2d sidescroll nicht nutzen..^^

Da wirst du - wie "billig" das Spiel auch sein soll - wohl nicht drum herum kommen. Wenn du einen realisitischen Sprung haben möchtest (keine Verschiebung des Sprites mit konstanter Geschwindigkeit) dann bleibt dir keine andere Wahl. ;)

Also wenn du damit einverstanden bist, dann kannst du es so machen:

C-/C++-Quelltext

1
2
3
4
5
6
7
float sh = 50.0f; // Sprunghöhe
float g = 9.81f;  // Gravitation
float ft = 0.0f; // FrameTime in Sekunden seit Sprungbeginn
float y_start; // Y-Koordinate zum Sprungbeginn

// Senkrechter Sprung: "oben" ist y=0 - "unten" ist y=320
y = y_start - ( sqrt(2*sh*g) * ft - g / 2 * ft * ft );


Gruß
SaRu_

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »SaRu« (27.01.2011, 17:08)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

27.01.2011, 13:36

und wie schick die physikformeln auch sind..die wollte ich bei einem billigen jump n run 2d sidescroll nicht nutzen..^^

Hmm, also ich muss sagen, dass ich diese eine Zeile Code irgendwie deutlich kürzer finde als deine ganzen IF-cases, die Du da momentan hast. Aber wieso einfach, wenn's auch kompliziert geht?
Na ja, war ja nur der Versuch Deinen Code und das Problem zu vereinfachen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

7

27.01.2011, 13:45

ich werd ihn mir zu herzen nehmen und danke recht herzlich dafür ^^

Werbeanzeige