我制作动画动画,在设备倾斜时在屏幕上移动图像。以下是我用来实现这一目标的代码:
var fl_Accelerometer:Accelerometer = new Accelerometer();
fl_Accelerometer.addEventListener(AccelerometerEvent.UPDATE, fl_AccelerometerUpdateHandler);
function fl_AccelerometerUpdateHandler(event:AccelerometerEvent):void
{
Image1.x -= event.accelerationX * 300;
if (Image1.x < 56.75)
{
Image1.x = 56.75;
}
else if (Image1.x > 1856.75)
{
Image1.x = 1856.75;
}
}
当我点击菜单屏幕上的不同按钮时,我希望能够打开和关闭加速度计输入。
在我点击任何按钮之前,我认为有一个等于1的整数;所以我做(accelerationX * 300)* [那个整数]并启用加速度计。然后我点击“停用”按钮&#39;按钮,1变为0,加速计被禁用。然后单击另一个按钮,整数再次变为1。
我该怎么做并且有更简单的方法吗?
答案 0 :(得分:4)
在我点击任何按钮之前,我认为有一个等于1的整数;
fl_Accelerometer.removeEventListener(AccelerometerEvent.UPDATE, fl_AccelerometerUpdateHandler);
是更好的选择,但你真的不需要额外的变量
要在处理程序函数中禁用加速度计,只需删除其中的侦听器:
regsvr32 <path-to-dll>
答案 1 :(得分:2)
@null和往常一样......
布尔值是更好的选择,但你真的不需要 附加变量
您可以声明
var accControl:Boolean = true; // Variables names should start with a lowercase letter
然后,你改变它:
accControl = !accControl; // if true => false if false => true
或者使用整数,你可以
var accControl:int = 1;
然后
accControl *= -1; // if 1 => -1 if -1 => 1
如果你有很多按钮,布尔可能是更好的选择。
即使是null的代码也是更干净的AMO,这可能对我希望的人有所帮助。
Flash中的一个示例,其中包含库中的CustomButton:
tl,dr;
var marginX:int = 20;
var spacerX:int;
var accControl:Boolean = true; // Variables names should start with a lowercase letter
var accControlInt:int = 1; // Variables names should start with a lowercase letter
var buttons:Vector.<SimpleButton> = new Vector.<SimpleButton>();
function addButtonsFromLib():void{
for(var i:int=0 ; i<10 ; i++){
buttons.push(new CustomButton);
addChild(buttons[i]);
buttons[i].name = "customButton_" + (i+1)
spacerX = buttons[i].width;
buttons[i].x = marginX + spacerX*i + buttons[i].width*i;
buttons[i].y = 20;
buttons[i].addEventListener(MouseEvent.MOUSE_DOWN,onClickInt);
buttons[i].addEventListener(MouseEvent.MOUSE_DOWN,onClickBool);
}
}
addButtonsFromLib();
function onClickBool(me:MouseEvent):void{
accControl = !accControl; // if true => false if false => true
trace(me.target.name + " cliqued => Boolean value is set to : " + accControl);
}
function onClickInt(me:MouseEvent):void{
accControlInt *= -1; // if 1 => -1 if -1 => 1
trace(me.target.name + " cliqued => int value is set to : " + accControlInt);
}
答案 2 :(得分:0)
这有效:
var AccControl:int;
AccControl = 1;
{
MenuScreen.ToggleOffAcc.addEventListener(MouseEvent.CLICK, AccOff);
function AccOff(event:MouseEvent):void
{
AccControl = AccControl + 1;
}
MenuScreen.ToggleOnAcc.addEventListener(MouseEvent.CLICK, AccOn);
function AccOn(event:MouseEvent):void
{
AccControl = AccControl - 1;
MenuScreen.ToggleOnAcc.visible=false;
}
}
var fl_Accelerometer:Accelerometer = new Accelerometer();
fl_Accelerometer.addEventListener(AccelerometerEvent.UPDATE, fl_AccelerometerUpdateHandler);
function fl_AccelerometerUpdateHandler(event:AccelerometerEvent):void
{
Street.x -= ((event.accelerationX * 300)* AccControl);
if (Street.x < 56.75)
{
Street.x = 56.75;
}
else if (Street.x > 1856.75)
{
Street.x = 1856.75;
}
}