首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游戏编程-地图裁剪

游戏编程-地图裁剪
EN

Stack Overflow用户
提问于 2013-10-10 00:00:09
回答 1查看 139关注 0票数 0

我有一个在背景图像上以1,1的速度移动的精灵。我想要绘制的背景图像与精灵始终在中心,因为背景大约是2000x2000。我的问题是,当精灵移动背景重新定位时,就好像精灵在2,2移动,背景在1,1移动,所以即使精灵在1,1移动,背景移动也不能比这更慢吗?

要更新精灵的速度,请执行以下操作:

代码语言:javascript
复制
    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);

速度的定义:

代码语言:javascript
复制
    carVelocity = new Point(1, 1);

在汽车周围绘制地图: public void drawMap(Canvas canvas) {

代码语言:javascript
复制
    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。

任何帮助都将不胜感激!

编辑:

嗨,这是这辆车的图纸:

公共空画布(Canvas DrawCar){

代码语言:javascript
复制
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,它就会逐渐从屏幕上消失。

EN

回答 1

Stack Overflow用户

发布于 2013-10-10 00:44:58

您是在汽车的X/Y位置还是在屏幕中心绘制汽车?我认为你的背景计算可能是好的,但是汽车正在移出屏幕,因为你正在改变你画它的位置。

我认为你应该把它想象成汽车在移动1,1 (或任何速度),而背景根本没有移动,你只需要计算汽车在背景中的哪一部分。考虑这一点的另一种方法是,汽车的屏幕位置是固定的(在中心,不移动),而背景在-car.velocity处移动。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19276998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档