好的,所以我有我的游戏,但我有一个问题,每当我按下按钮,按钮仍然被按下如果我从它删除光标而不释放鼠标按钮它按钮仍然是活动的。我怎么能解决它,使鼠标不在按钮的命中区域时它不活跃----解释它更好,更简单..如果我按下按钮并且不要放弃它,如果我是将鼠标拖离按钮区域并放开按钮仍然处于活动状态,我该如何解决?这是我的代码,让玩家走路。
var leftPressed:Boolean = false;
var rightPressed:Boolean = false;
var upPressed:Boolean = false;
var shootDown:Boolean = false;
var onGround:Boolean = true;
var level:Number = 1;
var bullets:Array = new Array();
var container_mc:MovieClip;
var enemies:Array = new Array();
var score:Number = 0;
var tempEnemy:MovieClip;
var tempLaser:MovieClip;
var timesHit:uint = 0;
// BUTTON EVENTS EITHER CLICKED OR NOT
left_btn.addEventListener(MouseEvent.MOUSE_DOWN, moveLeft);
right_btn.addEventListener(MouseEvent.MOUSE_DOWN, moveRight);
up_btn.addEventListener(MouseEvent.MOUSE_DOWN, moveUp);
shoot_btn.addEventListener(MouseEvent.MOUSE_DOWN, shootPressed);
left_btn.addEventListener(MouseEvent.MOUSE_UP, leftUp);
right_btn.addEventListener(MouseEvent.MOUSE_UP, rightUp);
up_btn.addEventListener(MouseEvent.MOUSE_UP, upUp);
player.gotoAndStop('still');
stage.addEventListener(Event.ENTER_FRAME,onenter);
function onenter(e:Event):void{
if (rightPressed == true && leftPressed == false){
player.x += 8;
player.scaleX = 1;
player.gotoAndStop("walking");
cloud.x -= 8;
} else if (leftPressed == true && rightPressed == false){
player.x -= 8;
player.scaleX = -1;
player.gotoAndStop('walking');
cloud.x += 8;
} else if(upPressed == true && leftPressed == false && rightPressed == false){
}
else{
rightPressed = false;
leftPressed = false;
player.gotoAndStop('still')}
}
// **** MOVEMENT CONTROLS *********
function shootPressed(e:MouseEvent):void{
shootDown = true;
if(shootDown == true){
fireBullet();
}
}
function fireBullet():void
{
var playerDirection:String;
if(player.scaleX < 0){
playerDirection = "left";
} else if(player.scaleX > 0){
playerDirection = "right";
}
var bullet:Bullet = new Bullet(player.x, player.y, playerDirection);
//bullets = new Array();
bullet.y = player.y + 8;
stage.addChild(bullet);
bullets.push(bullet);
trace(bullets);
}
// BUTTON FUNCTIONS
function moveLeft(e:MouseEvent):void
{
if(MouseEvent.MOUSE_DOWN){
leftPressed = true;
}else if (MouseEvent.MOUSE_UP) {
leftPressed = false;
}
}
function moveRight(e:MouseEvent):void
{
if (MouseEvent.MOUSE_DOWN){
rightPressed = true;
}else if (MouseEvent.MOUSE_UP){
rightPressed = false;
}
}
function moveUp(e:MouseEvent):void
{
if(MouseEvent.MOUSE_DOWN){
upPressed = true;
onGround = false;
player.y -= 100;
}
}
function leftUp(e:MouseEvent):void
{
leftPressed = false;
}
function rightUp(e:MouseEvent):void
{
rightPressed = false;
}
function upUp(e:MouseEvent):void
{
upPressed = false;
if(upPressed == false){
player.y += 100;
}
}
答案 0 :(得分:0)
除了mouseup事件之外,您还需要对鼠标移出事件执行某些操作。 如果不这样做,当鼠标停止时光标从按钮移动(“拖出”)时,永远不会触发鼠标向上事件。
使用活动MouseEvent.MOUSE_OUT
或MouseEvent.RELEASE_OUTSIDE
最好的方法是在MOUSE_UP
事件中添加eventlisteners,在触发MOUSE_OUT
事件时添加RELEASE_OUTSIDE
或MOUSE_DOWN
。
代码示例:
left_btn.addEventListener(MouseEvent.MOUSE_DOWN, handleButtonDown);
function handleButtonDown(e:MouseEvent):void
{
// activate "up" listeners
e.target.addEventListener(MouseEvent.MOUSE_UP, handleButtonUp);
e.target.addEventListener(MouseEvent.MOUSE_OUT, handleButtonUp);
e.target.addEventListener(MouseEvent.RELEASE_OUTSIDE, handleButtonUp);
// call your button action function
// e.target is your button
buttonDownAction(e.target);
}
function handleButtonUp(e:MouseEvent):void
{
// activate "up" listeners
e.target.removeEventListener(MouseEvent.MOUSE_UP, handleButtonUp);
e.target.removeEventListener(MouseEvent.MOUSE_OUT, handleButtonUp);
e.target.removeEventListener(MouseEvent.RELEASE_OUTSIDE, handleButtonUp);
// call your button action function
// e.target is your button
buttonUpAction(e.target);
}
function buttonDownAction(button:MovieClip) {
switch(button) {
case left_btn:
// do your thing here
case right_btn:
// do something else here
}
}
在这个例子中,我使handleButtonDown和handleButtonUp更通用,所以你可以将这两个函数用于所有按钮。
希望它对你有所帮助,祝你好运!
答案 1 :(得分:0)
我想,这就是你要找的东西。那应该够了。
left_btn.addEventListener(MouseEvent.MOUSE_DOWN, moveLeft);
left_btn.addEventListener(MouseEvent.MOUSE_UP, LeftUp);
function moveLeft(e:MouseEvent):void
{
leftPressed = true;
left_btn.addEventListener(MouseEvent.MOUSE_OUT, LeftOut);
}
function leftUp(e:MouseEvent):void
{
leftPressed = false;
left_btn.removeEventListener(MouseEvent.MOUSE_OUT, LeftOut);
}
function leftOut(e:MouseEvent):void
{
leftPressed = false;
left_btn.removeEventListener(MouseEvent.MOUSE_OUT, LeftOut);
}
当鼠标离开您的对象时,MOUSE_OUT只会触发,因此您只需添加具有此类事件的EventListener。当然,如果您之前没有点击过你的btn,你可能会理解听这个事件并不聪明,这就是为什么我选择只在听到MOUSE_DOWN时添加MOUSE_OUT。 因为你想要的只是在你的鼠标时设置leftPressed我想你的鼠标何时你也想要相同。 在此之后,我删除无用的侦听器(MOUSE_OUT)以便能够再次收听它们,因为这是一种常见的内存浪费。
但是,我真的不明白你为什么这样做:
function moveLeft(e:MouseEvent):void
{
if(MouseEvent.MOUSE_DOWN){
leftPressed = true;
}else if (MouseEvent.MOUSE_UP) {
leftPressed = false;
}
}
有什么用?!