所以,最近我和我的两个队友开始了我们的考试项目。这是一个基本的2D skijumping游戏。
我们之前已经在Android上进行过编程,但从未与游戏相关,我们有基本的技术来创建使用线程的动画等等。但我们似乎有一个扩展问题。
目前我们在分辨率为1920x1080的drawable文件夹中有一个背景图片,我们正在使用BitmapFactory将背景图像缩放到用户的屏幕尺寸,这似乎工作正常,非常适合我们所有3种不同的智能手机。< / p>
正在创建一个玩家精灵的动画,从山上滑下并从边缘跳下来,这看起来非常有趣并且完美无缺。为此,我简单地将屏幕宽度和高度除以100,并使用1%屏幕宽度的百分比在x轴上以特定速度移动他,同样在y轴上移动屏幕高度的1%。 / p>
它适用于大多数手机,但由于某种原因,它不会对所有手机都有效吗?我不明白为什么不呢?我的意思是数学应该始终有效吗?在某些手机上,他在空中飞到山外,而不是在正确的轨道上。我不知道我错过了什么,但我怀疑它与屏幕格式有什么关系?
有人可以开导我这个吗?请记住这是我们的第一款Android游戏,因此在游戏开发时是新的。
如果您事先有任何意见,请感谢您的所有意见。
答案 0 :(得分:0)
试试这个:
class V extends View implements Callback {
private Bitmap mBitmap;
private Matrix mMatrix;
private Handler mHandler;
private float mX;
private Paint mPaint;
public V(Context context) {
super(context);
Resources res = getResources();
mBitmap = BitmapFactory.decodeResource(res, R.drawable.layer0);
mMatrix = new Matrix();
mHandler = new Handler(this);
mHandler.obtainMessage(0).sendToTarget();
mPaint = new Paint();
mPaint.setColor(0xff00ff00);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
RectF src = new RectF(0, 0, mBitmap.getWidth(), mBitmap.getHeight());
RectF dst = new RectF(0, 0, w, h);
mMatrix.setRectToRect(src, dst, ScaleToFit.CENTER);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.concat(mMatrix);
canvas.drawBitmap(mBitmap, 0, 0, null);
canvas.drawRect(mX, 20, mX + 20, 40, mPaint);
}
@Override
public boolean handleMessage(Message msg) {
msg = mHandler.obtainMessage(0);
if (mX < mBitmap.getWidth()) {
mX += 1.5f;
mHandler.sendMessageDelayed(msg, 50);
} else {
Log.d(TAG, "handleMessage stop");
}
invalidate();
return true;
}
}