bei jeder kleinigkeit die ich verändern will treten immer wieder dutzende fehler auf die ich nicht nachvollziehen kann.
ich hab jetzt in dem spiel einen spieler, der sich korrekt bewegen kann, auch mit klettern und kollisionserkennung und springen und fallen etc.
jetzt hab ich eine gegnerklasse eingebaut. der gegner spawnt in der luft wie der spieler und fällt dann runter auf den boden, wie der spieler.
beide stehen dann richtig auf dem boden, so wie es sein sollte. aber wenn ich mit dem spielercharakter springe (yspeed wird ins negative verringert), sinkt der auf dem boden stehende gegner auf einmal in den boden sobald der spieler runterfällt(yspeed wird erhöht).
ich hab überhaupt keine ahnung wieso, es sind 2 voneinander unabhängige objekte.
ich hab hier die funktion um für alle sprite klassen den bewegungszustand zu updaten:
und hier die methode für die eigentliche bewegung:
die abstände gehen nur höchstens bis zur geschwindigkeit die sich das objekt pro loop bewegt.
hier zum beispiel abstandunten:
beim spieler hab ich die move funktion überschrieben, es wird dabei nicht das spielerobjekt selbst bewegt sondern jedes objekt in der gameView arraylist. da ist dann alles drin was im spiel zu sehen ist.
kann jemand irgendwas falsches erkennen?
ich hab jetzt in dem spiel einen spieler, der sich korrekt bewegen kann, auch mit klettern und kollisionserkennung und springen und fallen etc.
jetzt hab ich eine gegnerklasse eingebaut. der gegner spawnt in der luft wie der spieler und fällt dann runter auf den boden, wie der spieler.
beide stehen dann richtig auf dem boden, so wie es sein sollte. aber wenn ich mit dem spielercharakter springe (yspeed wird ins negative verringert), sinkt der auf dem boden stehende gegner auf einmal in den boden sobald der spieler runterfällt(yspeed wird erhöht).
ich hab überhaupt keine ahnung wieso, es sind 2 voneinander unabhängige objekte.
ich hab hier die funktion um für alle sprite klassen den bewegungszustand zu updaten:
Java:
public void updateMovement() {
if (climbing) {
if (canClimb()) {
} else {
climbing = false;
ySpeed = 0;
updateMovement();
}
}
else {
if (onGround) {
if (abstandUnten(gravity) > 0) {
onGround = false;
updateMovement();
} else {
ySpeed = 0;
}
} else {
if (abstandUnten(gravity) < 1) {
onGround = true;
} else {
if (this.ySpeed < this.gravity) {
ySpeed += 2;
}
}
}
}
}
und hier die methode für die eigentliche bewegung:
Java:
public void move(int x, int y) {
int abstandRechts = abstandRechts();
int abstandLinks = abstandLinks();
int abstandUnten = abstandUnten(ySpeed);
updateMovement();
if (ySpeed >= 0) {
if (abstandUnten >= 0 && onGround==false) {
this.y+=abstandUnten;
}
}
if (xSpeed > 0) {
if (abstandRechts != 0) {
this.x += abstandRechts;
} else {
xSpeed = 0;
}
}
else if (xSpeed < 0) {
if (abstandLinks != 0) {
this.x -= abstandLinks;
} else {
xSpeed = 0;
}
}
}
hier zum beispiel abstandunten:
Java:
public int abstandUnten(int moveSpeed) {
int abstand = 0;
int limit = 0;
if (moveSpeed < 0) {
limit = -moveSpeed;
} else if (moveSpeed > 0) {
limit = moveSpeed;
}
for (int i = 0; i < limit; i++) {
Rect bounds = new Rect(x, y + i, x + width, y + height + i);
if (collision(gameView.sprites, bounds)) {
break;
}
abstand++;
}
return abstand - 1;
}
beim spieler hab ich die move funktion überschrieben, es wird dabei nicht das spielerobjekt selbst bewegt sondern jedes objekt in der gameView arraylist. da ist dann alles drin was im spiel zu sehen ist.
Java:
else if (ySpeed >= 0) {
if (abstandUnten > 0) {
gameView.moveLevel(0, -abstandUnten);
}
}
Java:
public void moveLevel(int x, int y) {
this.x+=x;
this.y+=y;
for (Sprite s : sprites) {
s.x += x;
s.y += y
}
}
kann jemand irgendwas falsches erkennen?