0

我目前正在使用 box2Dweb 创建游戏。每当我的形状向画布的右下角移动时,它们的精灵似乎会移动一些偏移量,并且变得越来越大(如果我将形状向画布的左上角移动,精灵会越来越好地对齐) ,我真的不明白为什么。你们看到我的显示循环有什么问题吗?

我正在用这个片段创建方形立方体:

this.createSquare= function(x, y, bodyDef, fixtureDef, object){
    if(object.isStatic){
        bodyDef.type = b2Body.b2_staticBody;
    }else{
        bodyDef.type = b2Body.b2_dynamicBody;
    }
    fixtureDef.shape = new object.shape;
    polygonShape = fixtureDef.shape;
    polygonShape.SetAsBox(object.width,object.height);
    bodyDef.position.Set(x/game.worldScale,y/game.worldScale);
}

我在我的显示循环中使用这个函数来显示一些精灵:

for(var i=0; i < tab.length; i++) {
        context.save();
        console.log(context);
        context.translate(tab[i].GetBody().GetPosition().x * 30, tab[i].GetBody().GetPosition().y * 30);
        context.rotate(tab[i].GetBody().GetAngle());
            var dataResize = { 'image'    : tab[i].GetUserData().img,
                               'imgPosX'  : tab[i].GetBody().GetPosition().x,
                               'imgPosY'  : tab[i].GetBody().GetPosition().y,
                               'imgWidth' : tab[i].m_shape.m_vertices[2].x*60,
                               'imgHeight': tab[i].m_shape.m_vertices[2].y*60
            }
            context.drawImage(
                        dataResize.image, 
                        (dataResize.imgPosX) - (dataResize.imgWidth/2), //img pos x
                        (dataResize.imgPosY) - (dataResize.imgHeight/2), //img pos y
                        dataResize.imgWidth, //img wdith
                        dataResize.imgHeight //img height
                    )
        context.restore();
    }

我错过了什么?我已经尝试阅读几乎所有可以在 SOFLOW 上找到的内容,但看不到问题所在。

谢谢

4

1 回答 1

1

好的,找到了问题所在:

在我做的drawImage中

(dataResize.imgPosX) - (dataResize.imgWidth/2), //img pos x
(dataResize.imgPosY) - (dataResize.imgHeight/2), //img pos y

当我应该做的时候

(-dataResize.imgWidth/2)

反而 !

于 2013-12-13T08:54:30.990 回答