【问题标题】:Flash Cs5.5 Android AIR - Convert code from Keyboard to AccelerometerFlash Cs5.5 Android AIR - 将代码从键盘转换为加速度计
【发布时间】:2013-04-04 10:18:12
【问题描述】:

我希望有人帮我将此代码从使用键盘转换为使用 android 设备加速度计。因此,如果设备倾斜到 Y 轴,应用程序应该做出响应,使对象向前移动,如果设备倾斜到 X 轴或 -X 轴,应用程序应该将对象向左或向右旋转。

谁能帮忙?

我的代码:

package com.asgamer.directionalmovement
{

import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
import com.senocular.utils.KeyObject;
import flash.ui.Keyboard;

public class Ship extends MovieClip
{

    private var key:KeyObject;
    private var speed:Number = 0.3;
    private var rotateSpeed:Number = 5;
    private var vx:Number = 0;
    private var vy:Number = 0;
    private var friction:Number = 0.95;

    public function Ship () : void
    {
        key = new KeyObject(stage);
        addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
    }

    public function loop(e:Event) : void
    {

        if (key.isDown(Keyboard.UP))
        {
            vy += Math.sin(degreesToRadians(rotation)) * speed;
            vx += Math.cos(degreesToRadians(rotation)) * speed;
        } else {
            vy *= friction;
            vx *= friction;
        }

        if (key.isDown(Keyboard.RIGHT))
            rotation += rotateSpeed;
        else if (key.isDown(Keyboard.LEFT))
            rotation -= rotateSpeed;

        if (key.isDown(Keyboard.SPACE))
            stage.addChild(new Laser(x, y, rotation));

        y += vy;
        x += vx;

        if (x > stage.stageWidth)
            x = 0;
        else if (x < 0)
            x = stage.stageWidth;

        if (y > stage.stageHeight)
            y = 0;
        else if (y < 0)
            y = stage.stageHeight;
    }

    public function degreesToRadians(degrees:Number) : Number
    {
        return degrees * Math.PI / 180;
    }

}

}

【问题讨论】:

    标签: android actionscript-3 flash actionscript flash-cs5


    【解决方案1】:

    您可以使用 dispatchEvent 方法,编辑 Event 的属性,例如类型和加速度。我没有安卓设备,所以不能说下面的代码会 100% 工作。

    var ev:AccelerometerEvent = new AccelerometerEvent(AccelerometerEvent.UPDATE);
    ev.accelerationX = yourKeyboardAccelerationX;
    ev.accelerationX = yourKeyboardAccelerationY;
    dispatchEvent(ev);
    

    【讨论】:

      【解决方案2】:

      你可以使用 e.accelerationX,e.accelerationY AND e.accelerationX :

      import flash.sensors.Accelerometer; 
      import flash.events.AccelerometerEvent;
      var my_acc:Accelerometer
      if(Accelerometer.isSupported)
        initAcc();
      else
      trace("Accelerometer is not Supported")
      
      function initAcc():void
      {
      var my_acc:Accelerometer = new Accelerometer();
      //setting the update interval
      my_acc.setRequestedUpdateInterval(50);
      
      //catch the update event
      my_acc.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate);
      
      }
      function onAccUpdate(e:AccelerometerEvent):void{
      //you can use the e.accelerationX,e.accelerationY AND e.accelerationX
      
      myObject.x -= (e.accelerationX*10);
      myObject.y += (e.accelerationY*10); 
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-02
        • 2012-04-10
        • 1970-01-01
        • 1970-01-01
        • 2014-01-23
        • 1970-01-01
        相关资源
        最近更新 更多