gpt4 book ai didi

java - 使用 AndEngine GLES2 在游戏中使用 Sprites 的最佳实践

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:38 24 4
gpt4 key购买 nike

目前我对我的所有 Sprite 都有静态引用,并在我的 SimpleBaseGameActivity 的 OnCreateResource 方法中加载和初始化它们,但现在我必须覆盖 Sprite 上的 onAreaTouched 监听器以及我在初始化 Sprite 时可以覆盖它的方式。但是我有一个静态方法为每个 Sprite 创建图集和纹理区域。我在我的场景类中使用这些 Sprite ,我想在那里覆盖 onAreaTouched。我可以在我的场景中为那个特定的 Sprite 注册 TouchArea 以便可以完成但是我想以某种方式覆盖 OnAreaTouched 以便可以完成代码的可重用性。以下是我目前创建和加载 Sprite 的方式。

defualtCageSprite = createAndLoadSimpleSprite("bg.png", this, 450, 444);

这是我的方法 createAndLoadSimpleSprite。

public static Sprite createAndLoadSimpleSprite(String name,
SimpleBaseGameActivity activity, int width, int height) {

BitmapTextureAtlas atlasForBGSprite = new BitmapTextureAtlas(
activity.getTextureManager(), width, height);
TextureRegion backgroundSpriteTextureRegion = BitmapTextureAtlasTextureRegionFactory
.createFromAsset(atlasForBGSprite, activity, name, 0, 0);
Sprite sprite = new Sprite(0, 0, backgroundSpriteTextureRegion,
activity.getVertexBufferObjectManager());
activity.getTextureManager().loadTexture(atlasForBGSprite);

return sprite;
}

现在如何在不失去代码可重用性的情况下为某些 Sprite 覆盖 onAreaTouched。

最佳答案

有什么理由需要在运行时加载纹理吗?通常的方法是在加载应用程序时将所需的纹理全部加载到一个图集中,以便您以后可以快速使用它们。

至于代码的可重用性,Todilo 关于枚举的想法似乎正是您所需要的。举例来说,你有两种物体——当你触摸它们时消失的物体和当你触摸它们时飞起来的物体。您枚举这两个类别并将一段代码放入触摸事件处理代码中,以检查对象是否应该消失或飞起来。

如果您不知道在运行应用程序之前对象在触摸时应该做什么,有一种更动态的方法可以达到相同的结果。只需在运行时创建两个列表,并根据对象在触摸时应执行的操作,将对对象的引用放在其中一个列表中。然后在触摸事件处理中做这样的事情:

if (disappearList.contains(touchedObject)) {
disappear(object)
}
if (flyUpList.contains(touchedObject)) {
flyUp(object)
}

可惜 AndEngine 不允许用户在 sprite 上设置监听器,这会让事情变得更容易一些。

编辑:添加了 BlackPawnTextureBuilder 的使用说明:您的图集必须是 BuildableBitmapTextureAtlas 类型,然后像这样添加所有纹理

BitmapTextureAtlasTextureRegionFactory.createFromAsset(buildableAtlas, this, "image.png"));

之后

try {
this.buildableAtlas.build(new BlackPawnTextureBuilder<IBitmapTextureAtlasSource, BitmapTextureAtlas>(1));
} catch (final TextureAtlasSourcePackingException e) {
Debug.e(e);
}

我不知道这是否适用于动画 Sprites,您将不得不尝试一下。此外,没有重写 onTouch,您必须在 onAreaTouched 方法中执行此操作。这种情况的一个例子是

if (pSceneMotionEvent.getAction() == MotionEvent.ACTION_DOWN && disappearList.contains(pTouchArea)) {disappear();}

关于java - 使用 AndEngine GLES2 在游戏中使用 Sprites 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11502528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com