Ich beschäftige mich derzeit mit der Entwicklung von XNA-Spielen in der Sprache C #.
Ich habe zwei Klassen: den Hauptspielhandler und eine "Sprite" -Klasse. Es folgt ein grundlegender Pseudocode, der das Problem hoffentlich angemessen beschreibt.
Game.cs
class game {
sprite the_sprite;
void update(time) {
var mouse = mouse.state
if(mouse.clicked) { this.the_sprite.moveTo(mouse.x, mouse.y) }
this.the_sprite.update(time)
base.update(time)
}
}
Sprite.cs
class sprite {
vector2 location;
vector2 move_to;
void moveTo(x, y) { this.move_to = new vector2(x, y) }
void update(time) {
if(this.location.x > this.move_to.x /* (or less than) */) {
// adjust location.x
}
if(this.location.y > this.move_to.y /* (or greater than) */) {
// adjust location.y
}
}
}
Grundsätzlich gilt: Wenn der Benutzer irgendwo im Spielfenster klickt, werden die x- und y-Koordinaten der Maus erfasst, und das Spielobjekt bewegt sich über einen bestimmten Zeitraum zu diesem Ort.
Nun ... der Code funktioniert, ist aber hässlich und Objekte bewegen sich nicht direkt auf das Objekt zu (stattdessen ist es eine diagonale Bewegung, gefolgt von einer einachsigen Bewegung). Ich vermute, es gibt einige mathematische Funktionen, die ich verwenden kann, aber ich habe ehrlich gesagt keine Ahnung, wo ich anfangen soll. Irgendwelche Vorschläge?