开发者社区> 问答> 正文

如何通过使用加速度计将运动分配给玩家?

我正在使用一个与街机经典《太空侵略者》类似的方式运行Android应用程序,但我正在使用加速度计从左向右移动播放器。我在“ ElementInvadersView”类中使用了此方法,该方法允许用户通过触摸屏幕来移动播放器:


//Override onTouchListener method and detect screen touches
@Override
public boolean onTouchEvent(MotionEvent motionEvent) {

    switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {

        // Player has touched the screen
        case MotionEvent.ACTION_DOWN:

            paused = false;

            if (motionEvent.getY()>screenSizeY-screenSizeY/8){
                if (motionEvent.getX()  >   screenSizeX/2){
                    player.setPlayerMovement(player.RIGHT);
                }
                else{
                    player.setPlayerMovement(player.LEFT);
                }
            }

            if(motionEvent.getY()<screenSizeY-screenSizeY/8){
                //Shots Fired
                if(playerProjectile.shoot(player.getX()+player.getLength()/2,screenSizeY,playerProjectile.UP)){
                    soundPool.play(shootID,1,1,0,0,1);

                }
            }

            break;

        // Player has removed finger from screen
        case MotionEvent.ACTION_UP:

            if(motionEvent.getY()>screenSizeY-screenSizeY/10){
                player.setPlayerMovement(player.STOPPED);
            }

            break;
    }
    return true;
}
我```  
在ElementInvadersMainActivity类中创建了SensorEvent,Sensor和SensorEventListener,但它似乎无法找到“ x”值,因此我不知道如何传递它。

这是我的MainActivity中与加速度计有关的代码:
```js
ElementInvadersView elementInvadersView;
SensorManager sensorManager;
Sensor accelerometer;
SensorEventListener listener = new SensorEventListener() {
    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
            x = event.values[0];
            elementInvadersView.setX(x);
            elementInvadersView.invalidate();
        }


    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Display display =  getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    elementInvadersView = new ElementInvadersView(this, size.x, size.y);
    setContentView(elementInvadersView);
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}

我是否将加速度计放在错误的位置?它是否应该进入我的PlayerObject类,该类绘制对撞机并更新播放器的状态?

任何帮助将不胜感激。

展开
收起
垚tutu 2019-12-12 09:59:25 624 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
数据如何让运动更好玩 立即下载
数据如何让运动更好玩有趣 立即下载
运动手环是伪需求 智能装备才是“王道” 立即下载