gpt4 book ai didi

安卓射击游戏。复杂群体行为的强大敌人模式

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:18:09 24 4
gpt4 key购买 nike

我正在为 Android 开发一款类似于 Ikaruga 的街机射击游戏。我面临的问题是,事实证明很难为敌人稳健地创建移动和射击模式。目前我已经创建了两个抽象类 EnemyShip 和 FlightPath,每个不同的敌人和移动模式分别从中派生。当世界创建后,它实例化一个 LevelManager,它以以下形式存储关卡信息:

waveInfos.add(new WaveInfo(3, 3f)); // new WaveInfo(NumberOfGroups, spawn interval)
enemyGroups.add(new EnemyGroup(8, EnemyGroup.TYPE_SCOUT_SHIP, EnemyGroup.F_PATH_INVADERS));
enemyGroups.add(new EnemyGroup(1, EnemyGroup.TYPE_QUAD_SPHERE, EnemyGroup.F_PATH_QUAD_SPHERE_L, World.BLACK));
enemyGroups.add(new EnemyGroup(8, EnemyGroup.TYPE_SCOUT_SHIP, EnemyGroup.F_PATH_INVADERS));
// new EnemyGroup(NumberOfEnemies, EnemyType, FlightPathType)
// new EnemyGroup(NumberOfEnemies, EnemyType, FlightPathType, ShipColour)

waveInfos.add(new WaveInfo(2, 0.33f));
enemyGroups.add(new EnemyGroup(1, EnemyGroup.TYPE_QUAD_SPHERE, EnemyGroup.F_PATH_QUAD_SPHERE_L, World.WHITE));
enemyGroups.add(new EnemyGroup(1, EnemyGroup.TYPE_QUAD_SPHERE, EnemyGroup.F_PATH_QUAD_SPHERE_R, World.WHITE));

totalWaves = waveInfos.size();

关卡被分成几波敌人组,现在 EnemyGroup 类负责实例化,将指定的 FlightPath 添加到新创建的敌人并将该敌人传递到 LevelManager 中的 ArrayList 进行存储,直到在需要时间。

一旦生成 FlightPath 组件就会接管并开始根据它自己的 stateTime 发出指令,并且由于每个 FlightPath 都有一个指向其 EnemyShip 所有者的引用字段,它可以访问它控制的飞船功能和成员。

EnemyShip 类有一些易于指令的函数,例如 moveTo(float x, float y, float duration) 和 shoot() 但即使有了这些,FlightPath 导数也很难制作,尤其是当我想要同一个不同的敌人时组具有略微不同的路径和略微不同的时间到达。

我在 FlightPath 中创建了几个字段来跟踪关键帧:

public int currentKeyFrame = 0;
public int totalKeyFrames;
public KeyFrame[] keyFrames; // Stores duration of instruction to be done, the spreadTime, totalFrameTime and enemyIntervalTime
public int shipNumber; // Stores which ship out of group this FlightPath is attached to
public int totalShips; // Stores total number of ships in this EnemyShip's group
public float stateTime = 0;

KeyFrame.spreadTime 是我试图控制组中第一个敌人开始移动/射击与最后一个之间的时间。

KeyFrame.totalFrameTime = KeyFrame.duration + KeyFrame.spreadTime

KeyFrame.enemyIntervalTime = KeyFrame.spreadTime/该组敌人数量

虽然此设置非常适合非常简单的线性运动,但感觉起来很麻烦。

感谢您阅读到这里。我的问题是如何实现更流线型的模式控制,允许复杂的运动,而无需成群结队的 if() 语句来检查组中的其他敌人在做什么等等。

我希望我已经提供了足够的信息让您了解如何处理敌人。我会向任何感兴趣的人提供任何源代码。在此先感谢您提供有关该主题的任何信息。

马里奥斯·卡洛格鲁

编辑:我找到了一个页面,它非常详细地描述了一种非常适合我想要的系统,但我不确定如何在整个组关键帧方面正确实现它

http://www.yaldex.com/games-programming/0672323699_ch12lev1sec3.html

最佳答案

FlightPath 不应控制任何对象。这是一条道路,而不是经理。但是,它应该能够在给定任何关键帧或时间的情况下给出坐标。例如:flightPath.getX(1200) -> 我应该在 1200 毫秒的 X 坐标中的什么位置?

每个 EnemyShip 都应该拥有一个 FlightPath 实例。 EnemyShip 每帧检查它应该在路径中的什么位置。

EnemyGroup 然后控制每个 EnemyShip 的生成。如果您在一个 EnemyGroup 中有 8 艘 EnemyShips,它们都具有相同的 FlightPath 类型,那么您可以想象 EnemyGroup 会以大约 500 毫秒的间隔生成每艘船以创建波浪。

最后,您将所有 EnemyShip 坐标转换为相对于世界/屏幕坐标的坐标,该坐标通常在垂直方向上缓慢移动。

关于安卓射击游戏。复杂群体行为的强大敌人模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10092834/

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