gpt4 book ai didi

c# - 看到玩家时,敌人的音频和 Sprite 表不会启动/更改

转载 作者:行者123 更新时间:2023-12-02 23:12:40 25 4
gpt4 key购买 nike

对于我的程序,我在窗口窗体上生成随机放置的敌人,并在玩家不在视线范围内时让它们四处游荡。当玩家进入玩家的范围内时,他们会跟随并攻击玩家,直到玩家再次超出范围。

现在,所有代码都可以正常工作,但我遇到的问题是,当敌人看到玩家时,我想将敌人的 Sprite 表(在这种情况下是黑眼虫)更改为不同的显示它是“敌对”的 Sprite 表。同时,音频提示将开始播放,直到播放器超出范围才会停止。

另外,我不确定这是否相关,但是在一定间隔后,会出现一个新的敌人,因此屏幕上有多个敌人

我不知道为什么,但是敌人的 Sprite 不会切换 Sprite 表,并且当玩家使用我的代码查看时音频不会开始播放。我究竟做错了什么?

这是代码:

  //The timer to determine direction, the current sprite sheet for the enemies, and whether or not the audio is enabled
private void wander_Tick(object sender, EventArgs e)
{
int count = 0;
List<bool> seenOrNot = new List<bool>(); // a List of bools

//Iterates through a list of enemies
foreach (Enemies en in enemyList)
{
Enemies enemy = en;

if (CurrentPosition.Hostile[count])
{
//The 'hostile' sprite sheet for the enemy
enemy = new Enemies(Properties.Resources.WormSheet, CurrentPosition.enemyX[count], CurrentPosition.enemyY[count], Sapling.ReturnWidth(), Sapling.ReturnHeight());
seenOrNot.Add(true); //The player has been seen
}
else
{
//The 'neutral' sprite sheet for the enemy
enemy = new Enemies(Properties.Resources.WormSheetNeutral, CurrentPosition.enemyX[count], CurrentPosition.enemyY[count], Sapling.ReturnWidth(), Sapling.ReturnHeight());
seenOrNot.Add(false); //The player hasn't been seen
}
en.Direction(); //Generates a random number every tick of the timer
count++;
}

//This foreach loop will play audio when any of the enemies sees the player
foreach (Boolean b in seenOrNot)
{
if (seenOrNot.Contains(true))
{
wplayer.controls.play();//Plays music when player is in view
}
else
{
wplayer.controls.stop();//Stops the music
}
}
}

一如既往地感谢任何帮助:)

所以到目前为止我有这个代码来改变 Sprite 表的功能:
   public void ChangeSpriteSheet()
{
if (Hostile)
{
enemySprite = Properties.Resources.WormSheet;
CurrentPosition.seen = true;

}
else
{
enemySprite = Properties.Resources.WormSheetNeutral;
}

}

我将漫游计时器更改为:
  private void wander_Tick(object sender, EventArgs e)
{
CurrentPosition.seen = false;
int count = 0;
foreach (Enemies en in enemyList)
{
en.ChangeSpriteSheet(); //Changes the sprite sheet for the current enemy

en.Direction(); //Generates a random number every tick of the timer
count++;
}

//This foreach loop will play audio when any of the enemies sees the player
if (CurrentPosition.seen)
{
wplayer.controls.play();//Plays music when player is in view
}
else
{
wplayer.controls.stop();//Stops the music
}
}

在这个 'wander' 计时器中调用更改 Sprite 表的函数,它应该遍历每个敌人以检查是否应该更改 Sprite 表。

有了这个,音频工作正常,它会在播放器在范围内时开始,当他们不在范围内时停止。

但我仍然不太确定如何为敌人更改 Sprite 表。我更改了代码,以便在 Enemies 类而不是 Windows 窗体中设置实际的图像/ Sprite 表,所以它们都在同一个地方,但我不确定从那里去哪里。

在回应评论时,你们的意思是这样的吗?
   public Image NeutralHostile() //Returns the current sprite sheet 
{
return enemySprite;
}

public void ChangeSpriteSheet(Image image)
{

if (Hostile)
{
image= Properties.Resources.WormSheet;
CurrentPosition.seen = true;
}
else
{
image = Properties.Resources.WormSheetNeutral;

}
}

然后在计时器中,我将引用 NeutralHostile 函数作为 ChangeSpriteSheet 的参数。我是朝着正确的方向前进,还是完全偏离了方向?

最佳答案

enemy = new Enemies( ...



这条线没有做你认为它做的事情。它会创建一个新敌人并让您的 enemy可变点。注: en变量或列表中敌人的实例没有改变。

您需要编写一个方法,让现有的敌人更改它的 spritesheet,然后在您的 en 上调用它。多变的。

至于声音:您不需要 bool 列表。您需要一个 boolfalse 开始仅设置为 true当看到一个。那么你需要一个简单的 if .你的循环对我来说没有任何意义。尝试将其简化为单个 bool 值。

关于c# - 看到玩家时,敌人的音频和 Sprite 表不会启动/更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27232097/

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