在Android游戏开发中扩展,如何正确地做到这一点?

时间:2014-05-11 16:41:07

标签: android scale scaling image-scaling

所以,最近我和我的两个队友开始了我们的考试项目。这是一个基本的2D skijumping游戏。

我们之前已经在Android上进行过编程,但从未与游戏相关,我们有基本的技术来创建使用线程的动画等等。但我们似乎有一个扩展问题。

目前我们在分辨率为1920x1080的drawable文件夹中有一个背景图片,我们正在使用BitmapFactory将背景图像缩放到用户的屏幕尺寸,这似乎工作正常,非常适合我们所有3种不同的智能手机。< / p>

正在创建一个玩家精灵的动画,从山上滑下并从边缘跳下来,这看起来非常有趣并且完美无缺。为此,我简单地将屏幕宽度和高度除以100,并使用1%屏幕宽度的百分比在x轴上以特定速度移动他,同样在y轴上移动屏幕高度的1%。 / p>

它适用于大多数手机,但由于某种原因,它不会对所有手机都有效吗?我不明白为什么不呢?我的意思是数学应该始终有效吗?在某些手机上,他在空中飞到山外,而不是在正确的轨道上。我不知道我错过了什么,但我怀疑它与屏幕格式有什么关系?

有人可以开导我这个吗?请记住这是我们的第一款Android游戏,因此在游戏开发时是新的。

如果您事先有任何意见,请感谢您的所有意见。

1 个答案:

答案 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;
    }
}
相关问题