環境
godot engine4
実現したいこと
倉庫番でキャラクターを移動させる場合、特定の値を配列内で移動させると思います。
以下の配列では2をキャラクターに見立てています。
そして、右キーが押された時に、array[1][1]をarray[1][2]に移動させたいです。
var array = [
[0,0,0,0,0,0],
[0,2,0,0,0,0],
[0,0,0,0,0,0],
[0,0,0,0,0,0],
]
for i in range(array.size()):
for j in range(array[i].size()):
if array[i][j] == 2:
array[i][j] = 0#今の2の位置を0に
array[i][j + 1] = 2
こういった場合、一度一次元配列に変換したほうがやりやすいんでしょうか?
godotの場合ですが、 array[i][j + 1] = 2といった加算する記述は出来ません。
他の方法でも構いません。
倉庫番を作る際のセオリーのようなものがあれば教えて下さい。
> やりやすいんでしょうか?
コレが本件の質問内容なのですか?
例えば私が個人の感覚として「やりやすい or やりにくい」と答えたとして……一体それが何になるのでしょう? というあたりがわからないのですが.
で,それはそれとして,そもそも何でもかんでも配列に入れる必要があるのでしょうか?
「キャラクターの位置」というデータ(座標値)さえあればそれで済む話であるような気もするのですが,それだと問題ある感じですか?
>fanaさん
やり易いかどうかではなくて、移動の実現方法を知りたいです。
配列に入れているのは、解説サイトでは配列を使っているパターンが多いと感じたからです。
godot というやつを知らないので
> array[i][j + 1] = 2といった加算する記述は出来ません
という話の真偽はわかりませんが……
仮にそのようなことができない不便な言語(?)なのであれば,「配列で表現せずとも良いのであれば,別の手段で表現する」ことは,その不便さに対する回避策となり得そうな気もしますが,どうなんでしょうね.
(仮に,配列indexを指定する箇所に [j+1] みたいな演算を書けないのだとしても,例えば k = j+1 みたいに一旦演算結果を格納するための変数を設けてこれを用いて array[i][k] とか書くことはできるのではなかろうか? とか想像しますが)
"godot" でググってみた感じ,"GDScript" なるものでコードを書く?みたいな話にも見えましたが,このスクリプト固有の話で困っているのであれば,質問に相応のタグをつけるとそれを知っている人の目に付きやすくなるのではないでしょうか.(GDScript というタグは存在しているみたいです ←でも1件しか投稿無いっぽいのでダメかも)
> 「キャラクターの位置」というデータ(座標値)さえあれば
とか述べましたが…
考えてみると,キャラクタの位置を例えば CX,CY という2つの変数で表したところで,実際上「右に移動できるか?」という判定をするためには少なくとも位置 (CX+1, CY) の状況を調べる必要があるわけで,そのために array[CY][CX+1] みたいな形のコードが使えないのだとしたら,結局意味ないですね.
そこまで不便なのであれば, 配列を使うことをやめる 方向を考えるのが良いのではないか? という気すらしますが……本当にそんな不便な世界なんですかね?
こちらのサイト
https://gdquest.github.io/learn-gdscript/?ref=godot-docs
にてGDScriptを試してみましたが
array[i][j + 1]=2
といった記述は実行できました。
出来ないと思っているのはループのせいで右に移動後に次のループでまた自分の場所とif文で判断されて移動し続けているだけではないですか?
GDScriptのタグをつけてみてはどうですか?
実際になにもやらない人みたいなので、このサイトで
https://kidscancode.org/godot_recipes/4.x/2d/grid_movement/index.html
> array[i][j + 1]=2
> といった記述は実行できました。
文法的な面の問題が無いということであれば,「解説サイト」とやらで述べられているという「配列を使っているパターン」なる話を実装すれば良いということになるのでしょうから,本件において解決すべき課題は存在しないように思えます.
というわけで,以下の定型文を使うときが来た感じですね.
---
解決おめでとうございます!
解決方法をまとめて、「自己解決」として回答してください!
同じように困っている人の貴重な情報になると思います。
---
>倉庫番を作る際のセオリーのようなもの
godotで倉庫番の作成を解説してるページありましたけど・・・
>>Yamagnzさん
たしかにその記述は出来ました。ありがとうございます。
ループの問題だったようです。
>>fanaさん
その記述は出来ました。別の部分でエラーがでていて勘違いしていたようです。
>>yamagnzさん
そうですね
https://2dgames.jp/godot-sokoban-sample/
解説しているサイトはありましたけども、とりあえず自己流でやってつまみ食いする感じで参考にしていましたので、参考サイトを見る前にこちらで質問させてもらいました
困り事が何なのかがよくわかりませんが……
例えば現在の実装が
【同一のループの中で「現在のキャラクターの位置を探すこと」と「キャラクターの位置を変更すること」をやる形】
になっていて,それがうまいこと行っていない,みたいな状況なのだとしたら,
この2つの仕事を完全に分離してみると良いのかもしれません.
まず,「現在のキャラクターの位置を探すこと」だけを行い,
次に,「キャラクターの位置を変更すること」をやる
という形に.1つずつシンプルに解決していけば良いのではないかと.
(「これって,1つのループで書けるよね」とかいう実装の書き替えについては,後でやりたければやればよい)
> たしかにその記述は出来ました。ありがとうございます。
解決おめでとうございます!
解決方法をまとめて、「自己解決」として回答してください!
同じように困っている人の貴重な情報になると思います。
あなたの回答
tips
プレビュー