2013-10-09 38 views
0

我有一个精灵在背景图像上以1,1的速度移动。我想绘制背景图像与精灵始终在中心作为背景约2000x2000。我的问题是,精灵会移动背景重新定位,但它的精灵正在以2,2的速度移动,并且背景以1,1的速度移动。所以即使精灵在1,1上移动,背景肯定不能移动得慢一些,精灵会逐渐离开屏幕?游戏编程 - 地图剪辑

要更新精灵的速度:

carVelocity = new Point(1, 1); 

绘制汽车周围的地图: 公共无效drawMap(帆布油画){

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); 
    } 
} 

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); 

速度的定义

所以我不明白为什么汽车会从屏幕上移开,因为它看起来像我因为背景应该始终与汽车在屏幕中间画画。我已经把日志记录下来,并且每次都在X和Y上增加1。

任何帮助,将不胜感激!

编辑:

你好这里是汽车的拉引部分:

公共无效drawCar(帆布油画){

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

您是在汽车的X/Y位置或屏幕中心拉车吗?我认为你的背景计算可能没有问题,但是由于你正在改变你所处的位置,汽车正在离开屏幕。

背景并不真正移动,对吧?我认为你应该考虑这个问题,因为汽车正在移动1,1(或者任何速度),而背景并没有移动,你只需计算汽车所在的背景部分。另一种考虑这种方式的方法是汽车的屏幕位置是固定的(在中央,不移动),背景在-car.velocity处移动。

如果您包含代码示例(C#?),您还应该考虑使用您工作的语言标记问题。

+0

嗨,请参阅我的编辑。我已经包括了汽车图纸。 – jonny

+0

我不确定你期望发生什么。当你到达背景位图的边缘时,你不能继续在那个方向上“移动”并将地图保持在同一个地方。你想重复背景吗? – palmsey

+0

不,我想用car.x和car.y所以我可以达到边缘,这个工程!但是当我这样做时,赛车运动速度比摄像头快。所以想象一下,摄像机正在以1,1的速度移动,而汽车正在以2.2的速度移动,因此摄像机无法足够快地跟随赛车,赛车从屏幕上消失。这我不明白,因为我应该在car.x剪下背景 - getWidth()/ 2,所以相机应该围绕着汽车的右侧?在开始时这是真实的,但是一旦汽车移动它就会移动到屏幕上,并且相机不会保持居中! – jonny