Schönen Guten Tag,
ich und ein paar Freunde sitzen vor einem kleinen Problem beim Game Maker. Und zwar sind wir gerade dabei, uns die Grundzüge draufzuschaffen mittels der GML.
Ziel ist ein Action Plattformer. Allerdings tauchen dabei Probleme bei der Kollision mit Boden/Plattformen auf. Es ist immer möglich, sich in Ecken "reinzuglitchen" und wir bekommen es einfach nicht weg.
Wir haben dazu schon diverse Tutorials/Videos durchforstet, aber keine Lösung schafft Abhilfe. Vielleicht ist unser Vorgehen auch komplett falsch?
Anbei mal der aktuelle Code, der das Problem zwar verringert, aber noch nicht behoben hat.
Im Create Event:
Alles anzeigen
Und im Step Event vom Player Object:
Alles anzeigen
Steigt da jemand durch und kann uns bei dem Problem behilflich sein?
vielen Dank.
ich und ein paar Freunde sitzen vor einem kleinen Problem beim Game Maker. Und zwar sind wir gerade dabei, uns die Grundzüge draufzuschaffen mittels der GML.
Ziel ist ein Action Plattformer. Allerdings tauchen dabei Probleme bei der Kollision mit Boden/Plattformen auf. Es ist immer möglich, sich in Ecken "reinzuglitchen" und wir bekommen es einfach nicht weg.
Wir haben dazu schon diverse Tutorials/Videos durchforstet, aber keine Lösung schafft Abhilfe. Vielleicht ist unser Vorgehen auch komplett falsch?
Anbei mal der aktuelle Code, der das Problem zwar verringert, aber noch nicht behoben hat.
Im Create Event:
Quellcode
Und im Step Event vom Player Object:
Quellcode
- Controls();
- // ##########
- // Movement
- // ##########
- i_vSpeed += 0.4;
- var w_newHSpeed = 0;
- if(global.isPressedLeft) {
- w_newHSpeed -= i_moveSpeed;
- i_faceDirection = 180;
- } else if(global.isPressedRight) {
- w_newHSpeed = i_moveSpeed;
- i_faceDirection = 0;
- }
- if( !place_free(x, y + i_vSpeed) ){
- if( global.isPressedJump ){ i_vSpeed = -i_jumpStrength; }
- }
- // ##########
- // Colission
- // ##########
- if( w_newHSpeed != 0 ){
- if(!place_free(x + w_newHSpeed, y)) {
- if(w_newHSpeed > 0) { move_contact_solid(0, -1); }
- else { move_contact_solid(180, -1); }
- w_newHSpeed = 0;
- }
- }
- hspeed = w_newHSpeed;
- if( i_vSpeed != 0){
- if( !place_free(x, y + i_vSpeed) ) {
- if(i_vSpeed > 0) { move_contact_solid(270, -1); }
- else { move_contact_solid(90, -1); }
- i_vSpeed = 0;
- }
- }
- vspeed = i_vSpeed;
Steigt da jemand durch und kann uns bei dem Problem behilflich sein?
vielen Dank.