PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TRANS_MIRROR am gleichen Ort



Paul Kemp
11-08-2009, 20:02
Hallo!

Ich bin ein Java-Neuling und probiere mich gerade am umprogrammieren eines Java ME Beispieles. Dabei stosse ich auf folgendes Problem:

Wenn die entsprechende Links-Taste gedrückt wird soll sich die Spielfigur (hier genannt "Annel") umdrehen. Dafür werden folgende "Zeilen" benutzt:


if ((keyStates & GameCanvas.LEFT_PRESSED) != 0) {
Annel.move(-1 * speed, 0);
Annel.setTransform(Sprite.TRANS_MIRROR);

Wenn sich nun die Spielfigur durch einmaliges drücken umdreht dann steht sie aber nicht mehr an der gleichen stellen sondern um eine Position nach links gerückt (äquivalent bei Drehung von links nach rechts). Wie schaffe ich es, dass sich die Figur beim ersten Drücken der Taste nicht bewegt.

Bitte sagt mir bescheid falls ihr weitere Informationen benötigt. Vielen Dank und viele Grüße!!!

Frank aka Paul Kemp

jeebee
11-08-2009, 20:04
Lass halt mal das
Annel.move(-1 * speed, 0); weg

Paul Kemp
11-08-2009, 20:23
Das hab ich auch schon überlegt, aber dann kann ich die Spielfigur ja gar nicht mehr nach links bewegen.

jeebee
11-08-2009, 20:40
dann musst du wohl den state der Figur speichern und überprüfen:
class Figur {
public enum Direction {
LEFT,
RIGHT,
};

public Direction direction;

// alles andere was die Figur so können muss...
}

Dann beim keyPressed auch noch überprüfen was die Figur für eine Direction gespeichert hat:

if ((keyStates & GameCanvas.LEFT_PRESSED) != 0) {
if(Annel.direction != Figur.Direction.LEFT) {
Annel.direction = Figur.Direction.LEFT;
}
else {
Annel.move(-1 * speed, 0);
}
Annel.setTransform(Sprite.TRANS_MIRROR);


HTH jeebee

Paul Kemp
11-08-2009, 20:48
Ok vielen Dank schon einmal für diesen Tip. Ich hatte gehofft, dass geht auch einfach, indem ich die Figur über die Mitte spiegel und nicht am Rand des Sprites. So etwas ist wohl nicht möglich?!?!?!

jeebee
11-08-2009, 20:56
Das Spiegeln selbst würde wohl an Ort passieren, denn so wie dein Code aussieht wird ja setTransform() jedesmal aufgerufen, wenn du einen Schritt nach links machst. Das Problem ist, dass move() auch schon beim ersten Schritt nach links aufgerufen wird.

Paul Kemp
11-08-2009, 21:15
Ok, das klingt logisch. Noch eine letzte Frage (sorry!!!). Ich habe versucht dein Bsp. auszuprobieren. Folgende Fehlermeldung zeigt mir NetBeans an:

enums are not supported in -source 1.3
(use -source 5 or higher to enable enums)

as of release 5, enum is a keyword and not be used for identifier
(use -source 5 or higher to enable use enums as keyword)

Wie gesagt bin noch ein ziemlicher Anfänger. Mir sagt das nix. Was will man mir damit sagen und was muss ich ändern?

Tausend Dank!!!!!!!

jeebee
11-08-2009, 22:02
Offensichtlich verwendet J2ME nur Sprachfeatures bis J2SE v1.3. Enums wurden aber erst mit J2SE 5 eingeführt... Das heisst du musst halt den Status der Spielfigur mittels einem Integer speichern:

class Figur {
// directions
public final int LEFT = 0;
public final int RIGHT = 1;
public int direction;
}

und dann im if:
if(Annel.direction != Figur.LEFT) {...}