- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
基本上我有一个敌人和一个玩家。当敌人或玩家彼此碰撞时,会发生伤害并且玩家受伤导致 HP 损失。但是,一旦接触,只会造成一次伤害。如何确保在整个碰撞过程中不间断地对玩家造成伤害?
我正在设置一个 bool 变量 isTouching 并在接触时将其设置为 true。然后设置一个 while 循环,不断减少玩家的 HP。然后使用 OnCollisionExit 将 isTouching 设置为 false。
private bool isTouching; // determines if the player is
touching
private void OnCollisionEnter2D(Collision2D collision)
{
isTouching = true;
if (collision.gameObject.tag == "Enemy01")
{
while (isTouching == true)
{
GetComponent<AudioSource>().Play();
HPBAR.PlayHP -= Random.Range(5, 30);
if (HPBAR.PlayHP < 0)// Insures player HP bar doesn't read less
than zero in GUI TXT
{
HPBAR.PlayHP = 0;
}
// Debug.Log("Ouch! " + HPBAR.PlayHP + " Left");
if (HPBAR.PlayHP <= 0 && HPBAR.lives > 0)
{
HPBAR.lives--;
HPBAR.LPfloat--;
p5.transform.position = spawner.transform.position;
HPBAR.PlayHP = Random.Range(100, 150);
// Debug.Log("You're Dead!!! Lives left: " + (HPBAR.lives + 1));
}
else if (HPBAR.PlayHP <= 0 && HPBAR.lives <= 0)
{
SceneManager.LoadScene("DeathScene");
}
}//end of while
} // of player tag check
}// end of collision enter
private void OnCollisionExit2D(Collision2D collision)
{
isTouching = false;
}
while 循环会卡住我的计算机,因此我不建议您在 while 循环的情况下运行它。无论如何,我需要知道的是如何实现我想要做的事情。如何让敌人不断伤害玩家?例如,如果我跳到敌人身上,它会造成一次伤害,然后我就可以骑着他转了一圈。我希望不停地造成伤害,以迫使玩家离开或最终死亡。
最佳答案
OnCollisionEnter2D
旨在仅触发发生相同碰撞的第一帧。
您想使用 OnCollisionStay2D()
,它在每一帧发生碰撞时触发。
此外,摆脱 while
循环。在该方法终止之前,游戏无法更新(包括调用 OnCollisionExit2D
)。
private void OnCollisionStay2D(Collision2D collision)
{
if (collision.gameObject.tag == "Enemy01")
{
GetComponent<AudioSource>().Play();
// To take 5 - 30 damage per second:
HPBAR.PlayHP -= Random.Range(5f,30f) * Time.deltaTime;
if (HPBAR.PlayHP < 0)// Insures player HP bar doesn't read less than zero in GUI TXT
{
HPBAR.PlayHP = 0;
}
// Debug.Log("Ouch! " + HPBAR.PlayHP + " Left");
if (HPBAR.PlayHP <= 0 && HPBAR.lives > 0)
{
HPBAR.lives--;
HPBAR.LPfloat--;
p5.transform.position = spawner.transform.position;
HPBAR.PlayHP = Random.Range(100, 150);
// Debug.Log("You're Dead!!! Lives left: " + (HPBAR.lives + 1));
}
else if (HPBAR.PlayHP <= 0 && HPBAR.lives <= 0)
{
SceneManager.LoadScene("DeathScene");
}
} // of player tag check
}// end of collision stay
private void OnCollisionExit2D(Collision2D collision)
{
if (collision.gameObject.tag == "Enemy01")
{
// put "i quit touching the hurty thing" stuff here.
}
}
关于c# - 敌人对玩家的持续伤害 - Unity 2019.1 Beta,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53766829/
好的,这就是我的错误:'Enemy' 未在此范围内声明。错误在 map.h 文件中,即使 map.h 包含 enemy.h,如图所示 #ifndef MAP_H_INCLUDED #define MA
这个问题已经有答案了: How to make enemy follow player in pygame? (2 个回答) Enemy doesn't follow player (pygame)
我试图让我的 Canvas 游戏中的 Sprite 不断向玩家移动,直到它发生碰撞。执行此操作的相关函数是 update() 函数: Enemy.prototype.update = function
我在无休止的运行游戏中遇到了麻烦,主要是我创建的两种敌人的产卵,当我们调用函数“startDifficultyTimer”时,有时会产生两个敌人。 基本上,当我调用该函数时,游戏会在同一行生成 2 个
从性能角度来看,什么是最正确的 - 敌人和武器之间的交互算法(这里的子弹可能更正确)? 每个 Sprite 的每一个子弹都应该通过“collidesWith”方法检查碰撞情况,并在完整的敌人列表上进行
遇到了一个问题,即敌人会向玩家开火,但似乎总是开到高处或向玩家的一侧,即使玩家是静止的并且没有移动。我是不是在我的代码中做错了什么导致了这个疯狂的问题,或者它只是一个随机的烦人的错误? 为播放器使用相
我是新来的快速编程。我想使用类节点将敌人生成到随机位置。我试图搜索随机生成敌人的代码,但它似乎与我的代码无关。 这是我搜索随机生成的代码。 import SpriteKit class GameSce
我最近遇到了一些问题,只是在我正在制作的游戏中传递对对象/敌人的引用,我想知道我是否使用了错误的方法。 我的主要问题是处理敌人和物体,而其他敌人或玩家可能仍然与它们有联系。 例如,如果你有一只兔子和一
在我的 2d 游戏中,我有一个金币和铜币的概念如下: when normal enemies die ..they drop a random gold or copper coin. Now whe
我是新来的,所以我希望你能帮助我。 我正在学习制作简单的 cocos2d 游戏的教程 Ray Wenderlich's Tutorial 我在另一个游戏中实现了它,一个像涂鸦跳跃这样的跳跃游戏。 在上
我是一名优秀的程序员,十分优秀!