所以我们想制作一款游戏,我们用Android手机的加速计移动气球。使用ImageView可能会产生障碍,导致气球在碰撞时弹出。到目前为止,我们已经移动了ImageView气球,但似乎只能在ImageView气球的布局中看到drawable(称为yellow_balloon)。
java代码:
package com.ec327.ballon;
import android.os.Bundle;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.util.Log;
public class GameScreen extends Activity implements SensorEventListener {
private ImageView balloon=null;
final String tag = "AccLogger";
SensorManager sensore=null;
int xa=0;
int ya=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game_screen);
sensore = (SensorManager) getSystemService(SENSOR_SERVICE);
balloon = (ImageView)findViewById(R.id.balloon);
balloon.scrollTo(xa, ya);
//balloon.offsetLeftAndRight(50);
//balloon.offsetTopAndBottom(50);
//balloon.setImageResource(R.drawable.yellow_balloon);
}
public void onSensorChanged(SensorEvent event){
Sensor sensor = event.sensor;
float [] values = event.values;
synchronized (this) {
Log.d(tag, "onSensorChanged: " + sensor + ", x: " +
values[0] + ", y: " + values[1] + ", z: " + values[2]);
if (sensor.getType() == Sensor.TYPE_ACCELEROMETER ) {
xa=(int)values[0];// this part of code is only test to see int x and y on Activity
ya=(int)values[1];
}
}
balloon.scrollBy(xa, ya);
balloon.invalidate();
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
Log.d(tag,"onAccuracyChanged: " + sensor + ", accuracy: " + accuracy);
}
protected void onResume() {
super.onResume();
Sensor Accel = sensore.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
// register this class as a listener for the orientation and accelerometer sensors
sensore.registerListener((SensorEventListener) this, Accel, SensorManager.SENSOR_DELAY_FASTEST);
}
}
XML代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/blank_screen">
<ImageView
android:id="@+id/balloon"
android:layout_width="41dp"
android:layout_height="142dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:adjustViewBounds="true"
android:src="@drawable/yellow_balloon" />
</RelativeLayout>
在xml文件中,ImageView气球的layout_width = 41dp,layout_height = 142dp。当程序运行时,yellow_balloon会四处移动,但一旦它移出ImageView气球的布局尺寸,就不能再看到它了。
scrollBy()只移动drawable yellow_balloon而不是实际气球布局的位置吗?我们已经尝试过使用它以及layout.setMargins,但两者都没有。我们也尝试过使用setOffsetTopAndBottom和setOffsetLeftAndRight,但这并没有移动气球的ImageView。是什么导致了这个问题,我们该如何解决?
答案 0 :(得分:0)
我不完全确定使用imageViews是最简单或最有效的方式来做你正在做的事情,特别是如果你想为气球碰撞和弹出创造障碍。
我的建议是你的游戏完全在SurfaceView中完成。从这里你可以添加“Sprites”,这将是你的所有物体(你的气球,你的障碍物),你可以检查精灵碰撞(你的气球弹出的情况)。
图像视图的问题在于,您需要移动整个图像,并且一旦引入多个图像,除非图像周围的框完全填满图片,否则您将开始在图片之前获得图片重叠或碰撞发生实际碰撞。