Sunday, July 27, 2008

[AS3] making a moving movieclip wrap the screen

Hey guys, here is a quick addition to the code I gave you guys yesterday on AS3 arrow key movement. So today Im gonna show you guys how to make the object you are controlling wrap the stage. So here is the code I showed you yesterday:

    import flash.events.*;
var rightArrow:Boolean;
var leftArrow:Boolean;
var upArrow:Boolean;
var downArrow:Boolean;
var speed:uint = 10;
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
stage.addEventListener(Event.ENTER_FRAME, moveClip);
function keyDownHandler(event:KeyboardEvent):void{
if (event.keyCode == Keyboard.RIGHT) {
rightArrow = true;
}
if (event.keyCode == Keyboard.LEFT) {
leftArrow = true;
}
if (event.keyCode == Keyboard.UP) {
upArrow = true;
}
if (event.keyCode == Keyboard.DOWN) {
downArrow = true;
}
}
private function keyUpHandler(event:KeyboardEvent) {
if (event.keyCode == Keyboard.RIGHT) {
rightArrow = false;
}
if (event.keyCode == Keyboard.LEFT) {
leftArrow = false;
}
if (event.keyCode == Keyboard.UP) {
upArrow = false;
}
if (event.keyCode == Keyboard.DOWN) {
downArrow = false;
}
}
function enterFrameHandler(event:Event):void{
if (rightArrow) {
_clip.x += speed;
}
if (leftArrow) {
_clip.x -= speed;
}
if (upArrow) {
_clip.y -= speed;
}
if (downArrow) {
_clip.y += speed;
}
}



Now we are going to make it so that when it goes off the right side of the stage, it will appear on the left. In the enter frame function, within the right arrow if stetment, put this code:
if(object_mc.x > stage.stageWidth){
object_mc.x = -(object_mc.width);
}

This makes it so that once the movieclip's x coordinate is off of the stage, It appears just off the left side of the screen. Now here is the enterframe function again with the wrap stage code inserted:

   import flash.events.*;
var rightArrow:Boolean;
var leftArrow:Boolean;
var upArrow:Boolean;
var downArrow:Boolean;
var speed:uint = 10;
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
stage.addEventListener(Event.ENTER_FRAME, moveClip);
function keyPressed(event:KeyboardEvent) {
if (event.keyCode == Keyboard.RIGHT) {
rightArrow = true;
}
if (event.keyCode == Keyboard.LEFT) {
leftArrow = true;
}
if (event.keyCode == Keyboard.UP) {
upArrow = true;
}
if (event.keyCode == Keyboard.DOWN) {
downArrow = true;
}
}
function keyReleased(event:KeyboardEvent) {
if (event.keyCode == Keyboard.RIGHT) {
rightArrow = false;
}
if (event.keyCode == Keyboard.LEFT) {
leftArrow = false;
}
if (event.keyCode == Keyboard.UP) {
upArrow = false;
}
if (event.keyCode == Keyboard.DOWN) {
downArrow = false;
}
}
function moveClip(event:Event) {
if (rightArrow) {
object_mc.x += speed;
if (object_mc.x > stage.stageWidth) {
object_mc.x = -(object_mc.width);
}
}
if (leftArrow) {
object_mc.x -= speed;
if (object_mc.x < -(object_mc.width)) { object_mc.x = stage.stageWidth; } } if (upArrow) { object_mc.y -= speed; if (object_mc.y < -(object_mc.height)) { object_mc.y = stage.stageHeight; } } if (downArrow) { object_mc.y += speed; if (object_mc.y > stage.stageHeight) {
object_mc.y = -(object_mc.height);
}
}
}


This code all works basically the same as the first example. Post or email me any questions.

No comments: