| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Nov 2008
Beiträge: 5
|
Hi, bin neu hier im Forum und hoffe, dass mir jemand weiterhelfen kann. Ich bin dabei ein 2D-Game (Mischung aus Action Adventure und Jump'n'Run) zu programmieren und haben folgenden Aufbau in meiner Fla-Datei: -Auf der Bühne befindet sich ein MovieClip namens "background_mc"(--> Spielwelt) und in diesem befindet sich ein weiterer MovieClip "held_laufen_mc"(--> animierte Spielfigur). -Bühnenmaße sind 1024x768 bei 25 FPS -Die Grafik der Spielwelt ist ca. 3315 Pixel breit Nun mein Problem: Die Spielfigur bewegt sich per Pfeiltasten nach inks und rechts und jetzt will ich es erreichen, dass sich die Spielfigur immer in der Mitte der Bühne befindet, außer wenn sie in der Nähe des linken und rechten Bildrandes ist. Das klappt bis jetzt leider nur teilweise, denn wenn ich die Figur nach rechts bewege über die Bühnenmitte, wird zwar die Spielwelt nach links verschoben, hört aber leider auch nicht mehr damit auf bis das Spielende erreicht ist. Die Funktion, die für das Positionieren zuständig ist, heißt "heldPositionieren". Hier der Code meiner Level2_Ctrl.as: Code: package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.geom.Point;
public class Level2_Ctrl extends MovieClip
{
public var level2:Object = new Object();
//Konstruktor
public function Level2_Ctrl()
{
//Animation des Helden stoppen
background_mc.held_laufen_mc.stop();
//Erstellen eines Level2-Objektes und Festlegen der Eigenschaften
level2.gravity = 1;
level2.acceleration = 0;
level2.falling = false;
level2.speed = 7;
level2.sprungkraft = -15;
level2.breite = 1024;
level2.spielbreite = 3312;
//Levelbegrenzung für Helden
level2.leftBorder = 0;
level2.rightBorder = 3300;
//Position des Helden anhand des Screens zentrieren
level2.scrollSpeed = 3;
//Listener für Heldenpositionierung und Gravitation
stage.addEventListener(Event.ENTER_FRAME, heldPositionieren);
//background_mc.held_laufen_mc.addEventListener(Event.ENTER_FRAME, heldFallenLassen);
//Listener für Tastatur-Steurung
stage.addEventListener(KeyboardEvent.KEY_DOWN, heldGo);
stage.addEventListener(KeyboardEvent.KEY_UP, heldStop);
}
public function heldPositionieren (event:Event) : void
{
//Position des Helden festlegen
var heroPoint:Point = new Point();
heroPoint.x = background_mc.held_laufen_mc.x;
heroPoint.y = background_mc.held_laufen_mc.y;
background_mc.localToGlobal(heroPoint);
var xabstand = Math.round((level2.breite/2) - heroPoint.x);
if (Math.abs(xabstand) > level2.scrollSpeed)
{
if (xabstand > 0)
{
//Held befindet sich im linken Bereich des Screens
//=> Bildausschnitt nach rechts verschieben
if (background_mc.x < 0)
{
background_mc.x += level2.scrollSpeed;
}
}
if (xabstand < 0)
{
//Held befindet sich im rechten Bereich des Screens
//=> Bildausschnitt nach links verschieben
if ((background_mc.x + level2.spielbreite) > level2.breite)
{
background_mc.x -= level2.scrollSpeed;
}
}
}
}
/*public function heldFallenLassen (event:Event) :void
{
//Gravitation wirkt auf Held
if (level2.falling == true)
{
level2.acceleration += level2.gravity;
background_mc.held_laufen_mc.y += level2.acceleration;
}
}*/
//Funktionen für Tastatur-Steurung
public function heldGo(event:KeyboardEvent) :void
{
var key:uint = event.keyCode;
switch (key)
{
//nach rechts laufen
case Keyboard.RIGHT :
// Grenzen des levels
if (background_mc.held_laufen_mc.x < level2.rightBorder)
{
// Bewegen
background_mc.held_laufen_mc.x += level2.speed;
// Laufbewegung
background_mc.held_laufen_mc.play();
// Drehen in die richtige Richtung
background_mc.held_laufen_mc.scaleX = 1;
}
break;
//nach links laufen
case Keyboard.LEFT :
// Grenzen des levels
if (background_mc.held_laufen_mc.x > level2.leftBorder)
{
// Bewegen
background_mc.held_laufen_mc.x -= level2.speed;
// Laufbewegung
background_mc.held_laufen_mc.play();
// Drehen in die richtige Richtung
background_mc.held_laufen_mc.scaleX = -1;
}
break;
//springen
case Keyboard.SPACE :
if (level2.falling == false)
{
level2.acceleration = level2.sprungkraft;
background_mc.held_laufen_mc.gotoAndPlay(60);
background_mc.held_laufen_mc.y += level2.acceleration;
}
break;
}
}
public function heldStop(event:KeyboardEvent) :void
{
var key:uint = event.keyCode;
switch (key)
{
case Keyboard.RIGHT :
background_mc.held_laufen_mc.stop();
break;
case Keyboard.LEFT :
background_mc.held_laufen_mc.stop();
break;
case Keyboard.SPACE :
background_mc.held_laufen_mc.stop();
break;
}
}
}
} |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Nov 2008
Beiträge: 5
|
Hab es jetzt mitllerweile auf eine andere Art lösen können. Da ich mich vorher mit AS2 befasst habe, musste ich mich auch erstmal auf AS3 umgewöhnen und es hat wohl an der "localToGlobal" Sache gelegen, Da wurde irgendetwas falsch berechnet. Deswegen habe ich es komplett weggelassen. Jetzt liegt die Spielfigur auf dem MovieClip des Spielhintergrunds und nicht mehr in ihm drinnen und es funktioniert. Man sollte aber den Hintergrund und die Figur um den gleichen Wert verschieben, sonst holt der Held irgendwann den rechten oder linken Rand des Hintergrunds ein. |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |