如何在 Cocos2d 中添加一个始终显示在屏幕上的精灵?
How to add a sprite that is always on the screen in Cocos2d?
我正在用 c++ 中的 cocos2d-x v3 做一个平台游戏,其中地图通常非常大,可见屏幕会跟随对象穿过地图。
假设我想在屏幕的右上角显示一个精灵,即使屏幕跟随对象它也会在这个位置。
使用对象位置不行。
有没有办法在屏幕上显示精灵或其他任何东西,即使屏幕在移动它也会在屏幕上?
Ps。我是游戏开发的超级菜鸟
正如上面写的 here,你应该使用 convertToWorldSpace
convertToWorldSpace
converts on-node coords to SCREEN coordinates.convertToWorldSpace will always return SCREEN position of our sprite, might be very useful if you want to capture taps on your sprite but need to move/scale your layer.
Generally, the parent node call this method with the child node position, return the world’s postion of child’s as a result. It seems make no sense calling this method if the caller isn’t the parent…
因此,如您所见,
Point point = node1->convertToWorldSpace(node2->getPosition());
the above code will convert the node2‘s coordinates to the coordinates on the screen.
For example if the anchor position of node1 is which will be the bottom left corner of the node1, but not necessarily on the screen. This will convert the position of the node2 which is to the screen coordinate of the point relative to 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);
上面的代码将使视口 "move" 到玩家在世界位置的位置。所以在你的地图上跟随比当前视口大的玩家。我在游戏中所做的 menu/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 动作将元素滚动到屏幕之外。无论您的场景当前位于世界的哪个位置,您的元素都会出现在屏幕上。space。
让我知道这是否足够清楚。如果你遇到困难,我可以帮助你。
我已经设法使用视差节点来做到这一点,并使用精灵到达 Vec2(0,0) 的速度,这样它始终保持在屏幕中的同一位置。
您总是可以将该精灵放入与其他所有元素不同的节点/层中。这样移动这个层/节点不会移动精灵
我正在用 c++ 中的 cocos2d-x v3 做一个平台游戏,其中地图通常非常大,可见屏幕会跟随对象穿过地图。
假设我想在屏幕的右上角显示一个精灵,即使屏幕跟随对象它也会在这个位置。
使用对象位置不行。
有没有办法在屏幕上显示精灵或其他任何东西,即使屏幕在移动它也会在屏幕上?
Ps。我是游戏开发的超级菜鸟
正如上面写的 here,你应该使用 convertToWorldSpace
convertToWorldSpace
converts on-node coords to SCREEN coordinates.convertToWorldSpace will always return SCREEN position of our sprite, might be very useful if you want to capture taps on your sprite but need to move/scale your layer. Generally, the parent node call this method with the child node position, return the world’s postion of child’s as a result. It seems make no sense calling this method if the caller isn’t the parent…
因此,如您所见,
Point point = node1->convertToWorldSpace(node2->getPosition());
the above code will convert the node2‘s coordinates to the coordinates on the screen. For example if the anchor position of node1 is which will be the bottom left corner of the node1, but not necessarily on the screen. This will convert the position of the node2 which is to the screen coordinate of the point relative to 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);
上面的代码将使视口 "move" 到玩家在世界位置的位置。所以在你的地图上跟随比当前视口大的玩家。我在游戏中所做的 menu/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 动作将元素滚动到屏幕之外。无论您的场景当前位于世界的哪个位置,您的元素都会出现在屏幕上。space。
让我知道这是否足够清楚。如果你遇到困难,我可以帮助你。
我已经设法使用视差节点来做到这一点,并使用精灵到达 Vec2(0,0) 的速度,这样它始终保持在屏幕中的同一位置。
您总是可以将该精灵放入与其他所有元素不同的节点/层中。这样移动这个层/节点不会移动精灵