AS3 Stop-Zeichen aus, bewegt sich durch Mauern
Ich will halt die Videoclips Bewegung, wenn es eine Wand trifft (ein weiterer movieclip).
Das Beispiel unten funktioniert, aber nach der Kollision der movieclip 'Blöcke', die alle Bewegung auf der linken Seite...
Meine Frage an Sie ist, ist dies ein guter Weg, und warum funktioniert das nicht?
Gibt es etwas falsch in diesem code, aber ich bin zu lernen.
Jetzt das Beispiel mit dem leftArrow Taste;
Variablen überprüfen die-Taste, wenn Sie auf die Wände und ob es sich bewegt oder nicht:
var leftArrow:Boolean;
var speed:int = 10;
var hitting:Boolean;
var ismoving:Boolean;
Ereignis-Listener für die Tasten/Bewegung und Erkennung von Kollisionen:
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
stage.addEventListener(Event.ENTER_FRAME, walking);
stage.addEventListener(Event.ENTER_FRAME, detectHit);
Erkennung von Kollisionen-Funktion:
function detectHit(e:Event) :void
{
if(char.hitTestObject(bounds))
{
hitting = true;
}
}
Funktion der linken Taste:
function keyPressed(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.LEFT)
{
leftArrow = true;
}
}
function keyReleased(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.LEFT)
{
leftArrow = false;
}
}
Und der Grund, warum es nicht funktioniert ist wohl hier, aber ich verstehe nicht, warum nicht:
function walking(event:Event):void {
if (rightArrow) {
char.x += speed;
}
if (leftArrow && ! hitting) {
char.x -= speed;
}
else
{
ismoving = false
}
InformationsquelleAutor Opoe | 2011-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
char
zu bewegen, wennhitting
ist falsch. Wennchar.hitTestObject(bounds)
ist wahr, dass Sie sind Einstellunghitting
zu wahren. Sie sind nicht die Einstellunghitting
wieder auf false überall. Das ist, warum, wenn Links die Wand geschlagen wird, es Stoppt die linken Bewegung endgültig einzustellen. Sie müssen herausfinden, geeigneten Zustand zu setzenhitting
auf false wieder.Hinzufügen einer else-Zweig in
detectHit
sollte das problem lösen.hitting = char.hitTestObject(bounds)
Ja, das wäre besser.
danke für die Erklärung und die Zeit nehmen, zu Antworten
InformationsquelleAutor taskinoor
Obwohl Taskinoor die Methode funktionieren sollte, würde ich vorschlagen, eine andere Art und Weise zu tun, Ihre hittests.
Da Sie wahrscheinlich sind, ein Spiel zu schaffen (Charakter und Grenzen), haben Sie mehr als ein gebunden. In diesem Fall würde ich dringend empfehlen bitmap-hittesting. Auf diese Weise können Sie alle Ihre Grenzen in einem movieclip und test für einen Treffer.
Ich erkläre dies mit dem Beispiel eines Labyrinth. Das Labyrinth würde, dann werden einige Zeilen in ein movieclip nach dem Zufallsprinzip zusammengestellt. Wenn Sie HitTestObject und Sie nicht schlagen eine der Linien, aber dein Charakter ist über den movieclip, hitTestObject, wird true zurückgegeben, obwohl Sie nicht gegen eine Wand. Durch die Verwendung bitmapHitTesting, können Sie dieses problem umgehen (BitmapHitTest nimmt durchsichtige Pixel zu berücksichtigen, in der Erwägung, dass hitTestObject nicht).
Unten finden Sie ein Beispiel, wie dies bitmapHitTesting. Erstellen der bitmaps in dieser Funktion nicht erforderlichen, wenn Sie nicht verändern Ihre Form. In diesem Fall würde ich vorschlagen, platzieren Sie den code für die bitmapdata-in einer added_to_stage-Methode.
InformationsquelleAutor Michiel Standaert
Blick auf meinen Hinweis,
Verwende ich einen Schritt zurück, um entgegengesetzte Richtung statt.
InformationsquelleAutor Answer