對於我的程序,我在窗口窗體上生成隨機放置的敵人,並在玩家不在視線時讓他們四處遊蕩。當玩家進入玩家範圍內時,他們會跟隨並攻擊玩家,直到玩家再次離開範圍。現在,所有的代碼都可以正常工作,但是我遇到的麻煩是,當敵人看到玩家時,我想改變敵人的精靈表(在這種情況下是黑眼睛的蠕蟲) ,到一個不同的精靈表,表明它是「敵對的」。同時,音頻提示將開始播放,直到播放器超出範圍纔會停止播放。當玩家被看到時,敵方音頻和精靈表不會開始/改變
而且,我不知道這是否是相關與否,但有一定的時間間隔後,一個新的敵人會出現,所以在屏幕上多個敵人
我不知道爲什麼,但敵方精靈不會切換精靈表,並且當玩家看到我所擁有的代碼時,音頻不會開始播放。我究竟做錯了什麼?
下面的代碼:
//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
}
}
}
任何幫助表示讚賞,一如既往:)
所以我有這樣的代碼迄今功能改變精靈表:
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
}
}
在這個'流浪'定時器中調用更改精靈表的函數,它應該遍歷每個敵人以檢查精靈表是否應該更改。
這樣,音頻就可以正常工作,它會在播放器進入距離時開始播放,當播放器離開時停止播放。
但我仍然不太確定如何去改變敵人的精靈表。我更改了代碼,以便實際的圖像/精靈表被設置在Enemies類而不是Windows窗體中,所以它們都在同一個地方,但我不確定從那裏去哪裏。
針對評論,你們是否有這樣的意思?
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的參數。我正朝着正確的方向走,還是我完全離開?
哦,_oh_我什至沒有意識到,非常感謝你。我現在就去解決這個問題。謝謝! :D – ThatOneCanadian 2014-12-01 15:59:10
我認爲我最初只使用了一個單一的布爾音頻,但由於我正在檢查是否有任何敵人「看到」了該播放器,它總是會被設置爲假,因爲總是有至少一個敵人能夠「T‘看’的球員 – ThatOneCanadian 2014-12-01 16:11:39
@ThatOneCanadian那就不要布爾的值更改爲false,如果敵人看不到的球員,只將其更改爲true,如果敵人*可以*看到球員。 – 2014-12-01 16:26:44