AS3 中的对象障碍?
Object Barriers in AS3?
我是编码初学者,但我正在尝试制作 flash rpg 类型的游戏。我的游戏和步行者 (manmc) 周围有障碍。我一直在看 videos/reading 篇关于如何制作对象屏障的文章,但我似乎无法在不出错的情况下正确编码。我试图让我的角色在他撞到一棵树时停下来。这棵树被编码为 (treer1_MC)。我只是尝试在按下时对其进行编码,但它什么也没做,导致角色无法往回走。
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;
manmc.gotoAndStop ("Stand Front Frame");
var rightPressed:Boolean = new Boolean(false);
var leftPressed:Boolean = new Boolean(false);
var upPressed:Boolean = new Boolean(false);
var downPressed:Boolean = new Boolean(false);
var manSpeed:Number = 3;
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
stage.addEventListener(Event.ENTER_FRAME, gameLoop);
function keyDownHandler (keyEvent:KeyboardEvent):void
{
if(keyEvent.keyCode == Keyboard.RIGHT)
{
rightPressed = true;
}
else if(keyEvent.keyCode == Keyboard.LEFT)
{
leftPressed = true;
}
else if(keyEvent.keyCode == Keyboard.UP)
{
upPressed = true;
}
else if(keyEvent.keyCode == Keyboard.DOWN)
{
downPressed = true;
}
}
function keyUpHandler (keyEvent:KeyboardEvent):void
{
if(keyEvent.keyCode == Keyboard.RIGHT)
{
rightPressed = false;
manmc.gotoAndStop("Stand Right Frame");
}
else if(keyEvent.keyCode == Keyboard.LEFT)
{
leftPressed = false;
manmc.gotoAndStop("Stand Left Frame");
}
else if(keyEvent.keyCode == Keyboard.UP)
{
upPressed = false;
manmc.gotoAndStop("Stand Back Frame");
}
else if(keyEvent.keyCode == Keyboard.DOWN)
{
downPressed = false;
manmc.gotoAndStop("Stand Front Frame");
}
}
function gameLoop(loopEvent:Event):void
{
if(rightPressed)
{
if(manmc.x < 1050)
{
manmc.x += manSpeed;
}
manmc.gotoAndStop("Walk Right Frame");
}
else if(leftPressed)
{
if (manmc.x > 145)
{
manmc.x -= manSpeed;
}
manmc.gotoAndStop("Walk Left Frame");
}
else if(downPressed)
{
if(manmc.y < 780)
{
manmc.y += manSpeed;
}
manmc.gotoAndStop("Walk Front Frame");
}
if (manmc.hitTest(treer1_MC))
{
trace("leftHit");
manmc._x += 3;
}
else if(upPressed)
{
if(manmc.y > 145)
{
manmc.y -= manSpeed;
}
manmc.gotoAndStop("Walk Back Frame");
}
}
这是据说要使用的编码教程。有什么建议吗?
if (manmc.hitTest(treer1_MC))
trace("leftHit");
manmc._x += 3;
只是因为碰撞条件的声明在你的"downPress"条件之外:
else if(downPressed)
{
if(manmc.y < 780)
{
manmc.y += manSpeed;
}
manmc.gotoAndStop("Walk Front Frame");
}
if (manmc.hitTest(treer1_MC))
{
trace("leftHit");
manmc._x += 3;
}
缩进问题:),正确的做法应该是:
else if(downPressed)
{
if(manmc.y < 780)
{
manmc.y += manSpeed;
}
manmc.gotoAndStop("Walk Front Frame");
if (manmc.hitTest(treer1_MC))
{
trace("leftHit");
manmc._x += 3;
}
}
希望对您有所帮助 ;)
编辑:
manmc.hitTest(treer1_MC)
应该是:
manmc.hitTest对象(treer1_MC)
因为函数:hitTest() 是一个 AS2 函数,在 AS3 上有:hitTestPoint() 和 hitTestObject() ;)
我是编码初学者,但我正在尝试制作 flash rpg 类型的游戏。我的游戏和步行者 (manmc) 周围有障碍。我一直在看 videos/reading 篇关于如何制作对象屏障的文章,但我似乎无法在不出错的情况下正确编码。我试图让我的角色在他撞到一棵树时停下来。这棵树被编码为 (treer1_MC)。我只是尝试在按下时对其进行编码,但它什么也没做,导致角色无法往回走。
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;
manmc.gotoAndStop ("Stand Front Frame");
var rightPressed:Boolean = new Boolean(false);
var leftPressed:Boolean = new Boolean(false);
var upPressed:Boolean = new Boolean(false);
var downPressed:Boolean = new Boolean(false);
var manSpeed:Number = 3;
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
stage.addEventListener(Event.ENTER_FRAME, gameLoop);
function keyDownHandler (keyEvent:KeyboardEvent):void
{
if(keyEvent.keyCode == Keyboard.RIGHT)
{
rightPressed = true;
}
else if(keyEvent.keyCode == Keyboard.LEFT)
{
leftPressed = true;
}
else if(keyEvent.keyCode == Keyboard.UP)
{
upPressed = true;
}
else if(keyEvent.keyCode == Keyboard.DOWN)
{
downPressed = true;
}
}
function keyUpHandler (keyEvent:KeyboardEvent):void
{
if(keyEvent.keyCode == Keyboard.RIGHT)
{
rightPressed = false;
manmc.gotoAndStop("Stand Right Frame");
}
else if(keyEvent.keyCode == Keyboard.LEFT)
{
leftPressed = false;
manmc.gotoAndStop("Stand Left Frame");
}
else if(keyEvent.keyCode == Keyboard.UP)
{
upPressed = false;
manmc.gotoAndStop("Stand Back Frame");
}
else if(keyEvent.keyCode == Keyboard.DOWN)
{
downPressed = false;
manmc.gotoAndStop("Stand Front Frame");
}
}
function gameLoop(loopEvent:Event):void
{
if(rightPressed)
{
if(manmc.x < 1050)
{
manmc.x += manSpeed;
}
manmc.gotoAndStop("Walk Right Frame");
}
else if(leftPressed)
{
if (manmc.x > 145)
{
manmc.x -= manSpeed;
}
manmc.gotoAndStop("Walk Left Frame");
}
else if(downPressed)
{
if(manmc.y < 780)
{
manmc.y += manSpeed;
}
manmc.gotoAndStop("Walk Front Frame");
}
if (manmc.hitTest(treer1_MC))
{
trace("leftHit");
manmc._x += 3;
}
else if(upPressed)
{
if(manmc.y > 145)
{
manmc.y -= manSpeed;
}
manmc.gotoAndStop("Walk Back Frame");
}
}
这是据说要使用的编码教程。有什么建议吗?
if (manmc.hitTest(treer1_MC))
trace("leftHit");
manmc._x += 3;
只是因为碰撞条件的声明在你的"downPress"条件之外:
else if(downPressed)
{
if(manmc.y < 780)
{
manmc.y += manSpeed;
}
manmc.gotoAndStop("Walk Front Frame");
}
if (manmc.hitTest(treer1_MC))
{
trace("leftHit");
manmc._x += 3;
}
缩进问题:),正确的做法应该是:
else if(downPressed)
{
if(manmc.y < 780)
{
manmc.y += manSpeed;
}
manmc.gotoAndStop("Walk Front Frame");
if (manmc.hitTest(treer1_MC))
{
trace("leftHit");
manmc._x += 3;
}
}
希望对您有所帮助 ;)
编辑:
manmc.hitTest(treer1_MC)
应该是:
manmc.hitTest对象(treer1_MC)
因为函数:hitTest() 是一个 AS2 函数,在 AS3 上有:hitTestPoint() 和 hitTestObject() ;)