我正在使用c ++中的cocos2d-x v3进行平台游戏,其中地图通常非常大,可见屏幕通过地图跟踪对象。
假设我想在屏幕的右上角显示一个精灵,即使屏幕跟随对象,它也会处于此位置。
使用对象位置不会这样做。
有没有办法在屏幕上显示精灵或任何内容,即使屏幕移动它也会出现在屏幕上?
聚苯乙烯。我是游戏开发中的超级菜鸟
答案 0 :(得分:0)
正如它写的here,你应该使用convertToWorldSpace
,调用此方法似乎没有意义
convertToWorldSpace
将节点上的coords转换为SCREEN coordinates.convertToWorldSpace将始终返回我们精灵的SCREEN位置,如果你想捕捉精灵上的点击但需要移动/缩放你的图层,这可能非常有用。 通常,父节点使用子节点位置调用此方法,作为结果返回世界的子节点位置。如果调用者不是父...
所以,你可以阅读,
Point point = node1->convertToWorldSpace(node2->getPosition());
上面的代码会将node2的坐标转换为屏幕上的坐标。 例如,如果node1的锚位置是node1的左下角,但不一定在屏幕上。这会将node2的位置转换为相对于node1的点的屏幕坐标。
或者,如果您愿意,您可以使用函数convertToWorldSpaceAR
获取相对于场景的锚点的位置。
答案 1 :(得分:0)
因此,必须做出一些假设才能回答这个问题。我假设您在包含地图的图层上使用了“关注”操作。例如,检查here。类似的东西:
// If your playerNode is the node you want to follow, pass it to the create function.
auto cameraFollowAction = Follow:create(playerNode);
// running the action on the layer that has the game/map on it
mapLayer->runAction(cameraFollowAction);
上面的代码将导致视口“移动”到玩家处于世界位置的位置。因此,跟随地图上的玩家比当前视口大。我为游戏菜单/ hud做的是将Hud添加到不同的图层并将其添加到主游戏场景的根目录中。没有运行跟随操作的场景。像下面的东西。
// Hud inherits from layer and has all the elements you need on it.
auto inGameHud = HudLayer::create();
// Add the map/game layer to the root of main game scene
this->addChild(mapLayer, 0);
// Add the hud to the root layer
this->addChild(inGameHud, 1);
上面的代码假定'this'是您的MainGameScene。这限制了Follow操作从屏幕上滚动元素。无论您的场景目前在世界空间的哪个位置,您的元素都将出现在屏幕上。
让我知道这是否足够清楚。如果你遇到困难我可以帮助你。
答案 2 :(得分:0)
我已经设法使用视差节点,并使用精灵转到Vec2(0,0)的速度,这样它始终保持在屏幕的同一位置。
答案 3 :(得分:0)
您总是可以将该精灵放入其他所有节点/层中。这样移动这个图层/节点就不会移动精灵