【发布时间】:2025-12-04 20:00:01
【问题描述】:
我正在使用 c++ 中的 cocos2d-x v3 做一个平台游戏,其中地图通常非常大,可见屏幕通过地图跟随对象。
假设我想在屏幕右上角显示一个精灵,即使屏幕跟随对象,它也会在这个位置。
使用对象位置是不行的。
有没有办法在屏幕上显示精灵或其他任何东西,即使屏幕在移动,它也会在屏幕上?
附言。我是游戏开发的超级菜鸟
【问题讨论】:
标签: c++ cocos2d-x cocos2d-x-3.0
我正在使用 c++ 中的 cocos2d-x v3 做一个平台游戏,其中地图通常非常大,可见屏幕通过地图跟随对象。
假设我想在屏幕右上角显示一个精灵,即使屏幕跟随对象,它也会在这个位置。
使用对象位置是不行的。
有没有办法在屏幕上显示精灵或其他任何东西,即使屏幕在移动,它也会在屏幕上?
附言。我是游戏开发的超级菜鸟
【问题讨论】:
标签: c++ cocos2d-x cocos2d-x-3.0
正如here 所写,你应该使用convertToWorldSpace
convertToWorldSpace将节点上的坐标转换为 SCREEN 坐标。convertToWorldSpace 将始终返回我们精灵的 SCREEN 位置,如果您想捕获精灵上的点击但需要移动/缩放图层,这可能非常有用。 一般情况下,父节点调用该方法时会使用子节点位置,结果返回子节点的世界位置。如果调用者不是父级,调用这个方法似乎没有意义……
如你所见,
Point point = node1->convertToWorldSpace(node2->getPosition());
上面的代码会将node2的坐标转换为屏幕上的坐标。 例如,如果 node1 的锚点位置是 node1 的左下角,但不一定在屏幕上。这会将 node2 的位置转换为该点相对于 node1 的屏幕坐标)。
或者,如果您愿意,您可以使用函数convertToWorldSpaceAR 获取相对于场景锚点的位置。
【讨论】:
因此,必须做出一些假设才能回答这个问题。我假设您在包含地图的图层上使用跟随操作。例如检查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 操作将元素滚动到屏幕外。无论您的场景当前位于世界空间的哪个位置,您的元素都会出现在屏幕上。
让我知道这是否足够清楚。如果您遇到困难,我可以为您提供更多帮助。
【讨论】:
我已经设法使用视差节点并使用精灵到达 Vec2(0,0) 的速度来做到这一点,这样它就始终保持在屏幕上的同一位置。
【讨论】:
您总是可以将该精灵放入与其他所有内容不同的节点/层中。这样移动这个层/节点不会移动精灵
【讨论】: