MAS コミュニティ
artisoc質問用掲示板(アーカイブ)
  
質問掲示板は移転しました。新掲示板はこちら

質問 (解決済み)

[artisocモデル] セル上での移動について
質問者: はなさん , 質問日時: 2020/12/23 19:15
現在、卒業論文の制作にあたり、レジ待ちを題材にプログラムを作成しております。

列に並んだあと、レジに向かう工程で、セル一つ分しか移動しません。
デバッグで確認したところ、正常に実行されていました。
なぜ目的の座標まで進まないのかがわかりません。
以下がレジ移動のプログラムになります。

If My.regiX > 0 Then
If My.scene == 4 Then
My.Direction = GetDirection(My.X , My.Y , My.regiX, My.regiY , Universe.MV )
Forward(My.Speed)
My.X = Round(My.X)
My.Y = Round(My.Y)
End If

[scene=4 : 列の先頭に到着したことを確認
regiX,regiY : レジの座標]

お願いいたします。



▼解決した回答


目的地に到着する前に止まってしまうということは、
目的地の座標がMy.regiX, My.regiYに代入されていないかもしれません。

My.regiXとMy.regiYをPrintLnで出力すると、目的地の座標が代入されていますでしょうか?

回答者: m.tamada さん , 回答日時: 2020/12/24 16:24

▼ 全ての回答


この書き方では、エージェントが目的地に到着しても、必ずForwardしてしまうので、目的地に到着したらForwardしないようにすればよいと思います。


Agt_Init{
My.regiX = 2
My.regiY = 2
My.X = 0
My.Y = 0
My.scene = 4
My.Speed = 1
}

Agt_Step{

If My.regiX > 0 Then
If My.scene == 4 Then
If My.X <> My.regiX And My.Y <> My.regiY Then
My.Direction = GetDirection(My.X , My.Y , My.regiX, My.regiY , Universe.MV )
Forward(My.Speed)
My.X = Round(My.X)
My.Y = Round(My.Y)
End If
End If
End If
}

回答者: m.tamada さん , 回答日時: 2020/12/23 19:33
ご回答ありがとうございます。


追加し、実行をしましたが目的地に到着する前に止まってしまいます。

回答者: はな さん , 回答日時: 2020/12/24 15:25
目的地に到着する前に止まってしまうということは、
目的地の座標がMy.regiX, My.regiYに代入されていないかもしれません。

My.regiXとMy.regiYをPrintLnで出力すると、目的地の座標が代入されていますでしょうか?

回答者: m.tamada さん , 回答日時: 2020/12/24 16:24



Copyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
( 会社情報 情報セキュリティ・個人情報について )