Flash 游戏编程之卷屏

        最近买了一本《Flash  游戏编程基础教程》,很基础的知识,但是对新手很适合,给了你一个做Flash 游戏的方向。能你能够很快就明白怎么去做一个Flash 游戏。现在学到卷屏这块,跟着书上例子做了,发上代码来留个纪念:

       

package
{
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.events.Event;
import flash.filters.*;

public class Main_Character_Two extends MovieClip
{
var vx:int;
var vy:int;
var rightInnerBoundary:uint;
var leftInnerBoundary:uint;
var topInnerBoundary:uint;
var bottomInnerBoundary:uint;

public function Main_Character_Two()
{
init();
}
function init():void
{
vx=0;
vy=0;
rightInnerBoundary=(stage.stageWidth/2)+(stage.stageWidth/4);
leftInnerBoundary = (stage.stageWidth / 2) - (stage.stageWidth / 4);
topInnerBoundary = (stage.stageHeight / 2) - (stage.stageHeight / 4);
bottomInnerBoundary = (stage.stageHeight / 2) + (stage.stageHeight / 4);

stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown); //按下键的话就设置一个速度
stage.addEventListener(KeyboardEvent.KEY_UP,onKeyUp); //松开键的话就将速度设为0

//在不指定对象的情况下注册事件侦听器,会默认该侦听器注册到他所在的类中
addEventListener(Event.ENTER_FRAME,onEnterFrame); //有Event类的ENTER_FRAME属性的事件侦听器触发
}
function onKeyDown(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.LEFT)
{
vx = -5;
}
else if (event.keyCode == Keyboard.RIGHT)
{
vx = 5;
}
else if (event.keyCode == Keyboard.UP)
{
vy = -5;
}
else if (event.keyCode == Keyboard.DOWN)
{
vy = 5;
}
}
function onKeyUp(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.LEFT || event.keyCode == Keyboard.RIGHT)
{
vx = 0;
}
else if (event.keyCode == Keyboard.DOWN || event.keyCode == Keyboard.UP)
{
vy = 0;
}
}

function onEnterFrame(event:Event):void //触发事件动作
{
//Initialize local variables
var playerHalfWidth:uint = player.width / 2;
var playerHalfHeight:uint = player.height / 2;
var backgroundHalfWidth:uint=background.width/2;
var backgroundHalfHeight:uint=background.height/2;
var foregroundHalfWidth:uint=foreground.width/2;
var foregroundHalfHeight:uint=768/2;

//移动背景

//Move the player
player.x += vx;
player.y += vy;

//这里移动的时候总的思路就是先规定一个内边界,从你的玩家角色对象在正中间开始,往左移的话(在内边界范围内),角色动,而背景是不会动的
//等到角色移动到内边界左边时,先设置好角色的x坐标,然后让背景开始动,与角色的移动方向相反,当背景移动到了自己的左边界到了舞台左边界时
//背景也停止移动,同事设置好背景的x坐标,这个时候还要设置好内边界的左边界值,因为角色对象还是可以向左边移动的。当角色对象移动到最左边界的
//时候,这是不要忘了他的内边界范围的右边界值也要进行更新。因为如果你是先往右边界移动的话,你的右边界会被设置为stage.stageWith.
//其他方向同理可知
if (player.x - playerHalfWidth < leftInnerBoundary)
{
player.x = leftInnerBoundary + playerHalfWidth;
rightInnerBoundary = (stage.stageWidth / 2) + (stage.stageWidth / 4);
background.x -= vx/2;
foreground.x-=vx;
}
else if (player.x + playerHalfWidth > rightInnerBoundary)
{
player.x = rightInnerBoundary - playerHalfWidth;
leftInnerBoundary = (stage.stageWidth / 2) - (stage.stageWidth / 4);
background.x -= vx/2;
foreground.x-=vx;
}
if (player.y - playerHalfHeight < topInnerBoundary)
{
player.y = topInnerBoundary + playerHalfHeight;
bottomInnerBoundary = (stage.stageHeight / 2) + (stage.stageHeight / 4);
background.y -= vy/2;
foreground.y-=vy;
}
else if (player.y + playerHalfHeight > bottomInnerBoundary)
{
player.y = bottomInnerBoundary - playerHalfHeight;
topInnerBoundary = (stage.stageHeight / 2) - (stage.stageHeight / 4);
background.y -= vy/2;
foreground.y-=vy;
}

if(background.x+backgroundHalfWidth<stage.stageWidth) //背景向左走
{
background.x=stage.stageWidth-backgroundHalfWidth;
rightInnerBoundary=stage.stageWidth;
}
else
if(background.x-backgroundHalfWidth>0) //背景向右走
{
background.x=0+backgroundHalfWidth;
leftInnerBoundary=0;
}

if(background.y-backgroundHalfHeight>0) //背景向下移动
{
background.y=0+backgroundHalfHeight;
topInnerBoundary=0;
}
else
if(background.y+backgroundHalfHeight<stage.stageHeight)//背景向上移动
{
background.y=stage.stageHeight-backgroundHalfHeight;
bottomInnerBoundary=stage.stageHeight;
}


if(foreground.y-foregroundHalfHeight>0) //前景向下移动
{
foreground.y=0+foregroundHalfHeight;
topInnerBoundary=0;
}
else
if(foreground.y+foregroundHalfHeight<stage.stageHeight)//前景向上移动
{
foreground.y=stage.stageHeight-foregroundHalfHeight;
bottomInnerBoundary=stage.stageHeight;
}
}
}
}

  

  

posted @ 2011-12-03 10:40  古月水木  阅读(560)  评论(0编辑  收藏  举报