如何在Cocos2d中添加一个始终在屏幕上的精灵

How to add a sprite that is always on the screen in Cocos2d?

本文关键字:屏幕 一个 精灵 Cocos2d 添加      更新时间:2023-10-16

我正在使用c++中的cocos2d-x v3制作一款平台游戏,其中的地图通常非常大,可见屏幕跟随对象穿过地图。

假设我想在屏幕的右上角显示一个精灵,即使屏幕跟随对象,它也会在这个位置。

使用对象位置不起作用。

是否有一种方法可以在屏幕上显示一个精灵或任何东西,即使屏幕在移动,它也会在屏幕上?

p。我是游戏开发的新手

正如这里所写的,您应该使用convertToWorldSpace

convertToWorldSpace将节点坐标转换为SCREEN坐标。convertToWorldSpace将总是返回我们精灵的屏幕位置,如果你想捕捉精灵上的轻拍,但需要移动/缩放你的图层,这可能非常有用。通常,父节点用子节点的位置调用此方法,返回子节点的世界位置作为结果。如果调用者不是父对象,那么调用这个方法似乎没有意义。

所以,正如你所读的,

Point point = node1->convertToWorldSpace(node2->getPosition()); 
上面的代码将把node2的坐标转换为屏幕上的坐标。例如,如果node1的锚点位置是,它将是node1的左下角,但不一定在屏幕上。这将转换node2的位置(即相对于node1的点的屏幕坐标)。

或者如果您愿意,您可以使用convertToWorldSpaceAR函数获得相对于场景锚点的位置。

因此,要回答这个问题,必须做出一些假设。我假设你在包含地图的图层上使用Follow动作。例如,请查看这里。比如:

// 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)的速度,这样它总是停留在屏幕上的同一位置。

你总是可以把精灵放到不同的节点/层中。这样移动这个图层/节点不会移动精灵