我有一个精灵在背景图像上以1,1的速度移动。我想绘制背景图像,精灵总是在中心,因为背景大约是2000x2000。我的问题是精灵移动背景重新定位,但它好像精灵在2,2处移动而背景在1,1处移动。所以精灵逐渐从屏幕上移开,即使精灵在1,1处移动而且背景肯定不能慢于此?
更新精灵的速度:
Point car = new Point(
((GameBoard) findViewById(R.id.the_canvas)).getCarX(),
((GameBoard) findViewById(R.id.the_canvas)).getCarY());
car.x = car.x + carVelocity.x;
car.y = car.y + carVelocity.y;
((GameBoard) findViewById(R.id.the_canvas))
.setCarLocation(car.x, car.y);
速度的定义:
carVelocity = new Point(1, 1);
在汽车周围绘制地图: public void drawMap(Canvas canvas){
if (car.x > 0) {
int x = car.x - getWidth() / 2;
int y = car.y - getHeight() / 2;
Bitmap clipArea = Bitmap.createBitmap(map, x, y, getWidth(),
getHeight());
canvas.drawBitmap(clipArea, 0, 0, null);
}
}
所以我无法理解为什么汽车会从屏幕上移开,因为它看起来像我的背景应该总是在屏幕中间用汽车画出来。我已经对两者进行了登录,并且每次都在X和Y上增加1。
任何帮助将不胜感激!
编辑:
嗨,这是汽车的绘图部分:
public void drawCar(Canvas canvas){
if (car.x > 0) {
m.reset();
m.postTranslate((float) (getWidth() / 2), (float) (getHeight() / 2));
m.postRotate(carRotation,
(float) (getWidth()/2 + carBounds.width() / 2.0),
(float) (getHeight()/2 + carBounds.height() / 2.0));
canvas.drawBitmap(carBitmap, m, null);
}
如果我像上面那样绘制它然后它绘制在中心(我在测试时使用它)但是当然我永远不会到达地图的边缘,因为一旦我在位图的末尾它停留在中间的屏幕。一旦我改为car.x和car.y而不是getWidth()/ 2,它就会逐渐消失在屏幕上。
答案 0 :(得分:0)
您是将车开到汽车的X / Y位置还是屏幕中央?我认为您的背景计算可能没问题,但是汽车正在离开屏幕,因为您正在改变您正在绘制它的位置。
背景并没有真正移动,对吗?我认为你应该把它想象成汽车移动1,1(或任何速度)并且背景根本不移动,你只需计算汽车所处的背景部分。另一种思考方式是汽车的屏幕位置是固定的(在中心,没有移动),背景在-car.velocity移动。
如果您要包含代码示例(C#?),还应考虑使用您正在使用的语言标记问题。