[回到版面]
回應模式
名 稱
E-mail
標 題
內 文
附加圖檔[] []
刪除用密碼(刪除文章用。英數字8字元以內)
  • 可附加圖檔類型:GIF, JPG, PNG, JPEG,瀏覽器才能正常附加圖檔
  • 附加圖檔最大上傳資料量為 2000 KB。當回文時E-mail填入sage為不推文功能
  • 當檔案超過寬 125 像素、高 125 像素時會自動縮小尺寸顯示
  • 程式碼可使用 [code][/code] 以 google-code-prettify 標亮 (程式自動判斷語言類別)

  • 公告、舉報、建議請向DB管理室辦理。
  • 本板討論遊戲製作為主,改造方面也可討論,但如果牽涉到版權,請自重。
  • 3D建模請至3D板, 3D遊戲製作(Ex.怎麼用DirectX跑3D?)則可在這討論。
  • 本板為一般向板面,禁止張貼上車圖。

檔名:1456598405059.png-(296 KB, 521x454) [以預覽圖顯示]
296 KB無標題 名稱: 無名氏 [16/02/28(日)02:40 ID:eanUiuQ.] No.11825  [!] 
因為推不上來了開新串問一下

>>J6v4BiGY
>>無名氏: 你差不多該學"有限狀態機"的知識了
前陣子學了一些東西不太確定是不是你指的有限狀態機w,
希望能稍微解說一下是什麼意思,謝謝w。

>>No.11721
我之後發現Update不能直接寫Bool的判定,
他會完全不能改w所以我改成IF裡面就沒問題了,
不過還是有個小問題想請教你

void Update () {

StartCoroutine(Moveing);

}

IEnumerator Moveing () {

if (ComeOut) {

yield return new WaitForSeconds(1);
anim.SetBool ("Move", true);
yield return new WaitForEndOfFrame();
anim.SetBool ("Move", false);
}

}

以上是我參考你寫的方式去寫的腳本,可是他跑出錯誤,
我讓Update直接跑Moveing雖然沒錯誤,可是他卻沒任何反應,
請問該怎麼解決呢?
無標題 名稱: 無名氏 [16/02/28(日)05:59 ID:XCZEv5iQ] No.11826  [!]  
建議你不要直接塞StartCoroutine在update()裡面
他內部做了很多你不知道的事情
每個frame一直去call他感覺就滿可怕的

不太懂你裡面那樣做有啥意義
進去後等一秒把Move設成true
等一個frame馬上又設成false

我寫個簡單的有限狀態機給你看
你寫之前可以先想想你到底要幹嘛
即便只是用中文把流程清楚地描述出來
也比隨便寫,錯了就硬湊硬要湊出來好

enum 玩家狀態
{
待機,
移動,
攻擊,
無敵
}
public 玩家狀態 m_玩家狀態 = 玩家狀態.待機;
void Update()
{
偵測按鈕();
狀態更新();
}

void 偵測按鈕()
{
if(Input.Getkeydown("攻擊按鈕"))
m_玩家狀態 = 玩家狀態.攻擊
else if(Input.Getkeydown("移動按鈕"))
m_玩家狀態 = 玩家狀態.移動
}
void 狀態更新()
{
switch(m_玩家狀態)
{
case 玩家狀態.待機:
..........
break;
case 玩家狀態.移動:
..........
break;
case 玩家狀態.攻擊:
..........
break;
case 玩家狀態.無敵:
..........
break;
}
無標題 名稱: 無名氏 [16/02/28(日)13:41 ID:ph5eQFkw] No.11827  [!]  
你的程式會出錯是因為這邊
StartCoroutine(Moveing)
^^^^^^^^
要改成這兩種方式
StartCoroutine("Moveing")
StartCoroutine(Moveing())

你應該去看懂他error訊息在寫什麼

另外
不要在update call Coroutine...


====================================
看你內文
你在別的FB粉絲團也有發文提問吧
怎麼不去看人家的回答?
無標題 名稱: 無名氏 [16/02/28(日)16:06 ID:eanUiuQ.] No.11828  [!]  
>>No.11826
所以說狀態機就是用switch給他開關各種設定好的狀態嗎?
晚點寫寫看希望不要出錯w

>> No.11827
因為我昨天半夜差不多在同一時間發的w今天起來才有用w
感謝島民的建議,我會試著換個方式讓他跑跑看w
無標題 名稱: 無名氏 [16/02/29(一)00:08 ID:qFBca1E2] No.11829  [!]  
借串問一下
我蠻常看到IEnumerator這個東西的
其實我蠻想知道為何要用這個
是C#裡面才有的吧
學的時候老師沒有用過IEnumerator也沒解釋過
但是組員每個都放這個進去也沒註解
結果程式碼出包我也不知道哪邊和他們連動有問題

問他們也是一知半解的
不知道去哪邊複製來的
無標題 名稱: 無名氏 [16/02/29(一)03:00 ID:otyviDcg] No.11830  [!]  
主要是IEnumerator中可以使用yield語句吧
yield主要除了WaitForSeconds用法外
還可透過yield return達成"一行一行"執行的特色
適合用於一些初始化的地方
ex:做完a()→等待1秒→做b()
IEnumerator Moveing () {
yield return a();
yield return new WaitForSeconds(1.0f);
yield return b();
}

如果要透過Update()來處理初始化的動作
可能就需要透過多個判斷式來檢查處理的狀況
或者有b一定要等a設置完,才能接續處理的時候
yield return就會很方便
無標題 名稱: 無名氏 [16/03/02(三)20:37 ID:GU9yolDI] No.11833  [!]  
關於coroutine可以參考這個文章http://dsqiu.iteye.com/blog/2029701

【刪除文章】[]
刪除用密碼:

第一頁[0] 最後一頁