[過去ログ] 【軽量】godot engine【無料】 part3 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
291(1): 2024/04/25(木)00:19 ID:5JWtrSqN(1/4) AAS
昔の2Dゲーム機は基本的に背景をマップタイル(キャラクタージェネレータなどとも呼ばれる)単位で管理してたものだから、同じように仮想的なタイルを敷き詰めた画面があるものとして構造体組んで、その上でモブがタイルに沿って動く管理を考えるのがとりあえずは昔のノウハウを適用できて簡単だと思う
倉庫番はまさにそういう動き
292(1): 2024/04/25(木)00:27 ID:8kKIrJCJ(1) AAS
AIに聞けばええやん
293(1): 2024/04/25(木)00:30 ID:5JWtrSqN(2/4) AAS
なのでモブが動くときはpix単位の座標移動が発生するけどそれはサブルーチンとして、ゲームアルゴリズムとしてはマップ全体の座標を整数の配列で(例えば100×100とか)表して制御し、画面に表示する座標は既に言われてるように適切に係数掛け算する関数を作るのが良いと思います
倉庫番の場合、マップが広いレベルを縮小してモニタに表示したりするので、その拡大縮小表示の変換が自由にできるほうがUXが良くなるし、なんなら回転表示もしたくなるかもしれないので。
294: 2024/04/25(木)00:33 ID:5JWtrSqN(3/4) AAS
>>292
まあ倉庫番まんまならAIに頼めばノーコードで完成するでしょうな
しかしゲームメカニクスの基礎は自分の頭で考えないと応用が効かなくなるから
295: 2024/04/25(木)00:42 ID:7TwSlN/Q(1/4) AAS
ちがうアプローチとしてはTileMapを使用するかな
使えるようになるまでのコストが大きいからお勧めとは言い難いが
高機能で複雑な分、理解できたら便利なクラス
296: [SAGE] 2024/04/25(木)01:06 ID:/gUanyy1(1) AAS
理解できないから半年以上苦しんでるんでしょう。
もっと園児でもわかるような単純なやり方を教えてあげて
297: 2024/04/25(木)01:08 ID:5JWtrSqN(4/4) AAS
まんまTilemapなクラスがあったのね
これなら簡単だわ勉強になりました
298: 2024/04/25(木)06:12 ID:Esvk0j05(1/6) AAS
>>291
キャラの動きも配列の書き換えで行って、書き換えられたら再描画というふうにしてもいいんですが
これだと滑らかに動くキャラってのが作れなくなるんですよね
だからチュートなどではvector2で移動させてるんだろうなと
マップ座標とvector2座標の変換は必要になりますね
>>289
別に特殊なクラスとか使うことないんですね
299: 2024/04/25(木)06:27 ID:Esvk0j05(2/6) AAS
>>293
ゲームロジックとしては配列の書き換えだけということですか?
配列の書き換え→その位置に基づいてキャラを描画、ということでしょうか
300: 2024/04/25(木)12:30 ID:Esvk0j05(3/6) AAS
関数から、2つの値を返すには何使うんですか?
カンマ区切りではダメだったので[1,2]こういう形にしたらいけました
301: 2024/04/25(木)12:50 ID:Esvk0j05(4/6) AAS
↑2つの値を返して、二次元配列として使いたい感じです
array[0][0]
こんな感じです
302: 2024/04/25(木)13:25 ID:7TwSlN/Q(2/4) AAS
2つの値を返す方法が[1,2]でいけたならそれで解決じゃね?
var return_value = [1, 2]
array[return_value[0]][return_value[1]]
303: 2024/04/25(木)14:29 ID:ddMre8ET(1/4) AAS
GDScriptでいいのか?
Pythonっぽい言語仕様だけど実際はC++をスクリプトにしただけっぽいので
Pythonで複数の値を返す時に使うTupleは使えないんだとよ
方法としては2つ、Arrayで返すかDictionaryで返す
以下はサンプルコードな ※RUNボタンで実行結果も確認できるぞ
外部リンク:gd.tumeo.space
304: 2024/04/25(木)15:44 ID:Esvk0j05(5/6) AAS
ありがとう配列で値を返して、インデックス番号でとればいいんですね
これがタプルってやつですか
外部リンク:www.reddit.com
あと、人いねーと思っていつもの癖でマルチポストしちゃった
ごめんなさい改善します
305: 2024/04/25(木)16:12 ID:ddMre8ET(2/4) AAS
マルチでもなんでも問題解決できりゃなんでもいいんだぞ
あとTupleの話は出すべきじゃなかったな、忘れてくれ
306(1): 2024/04/25(木)16:35 ID:lNMYdYSi(1) AAS
流石になんでも良くはねえよ…
それぞれの場所で時間使って答えてくれてんだから
307(1): 2024/04/25(木)17:07 ID:7TwSlN/Q(3/4) AAS
同じ質問は数日待っても解答が得られなかったらとか制限は掛けた方がいいな
redittの方の解答にあるが戻り値がx,yの座標を扱うものであるならVector2を使うと読みやすくなる
308(1): 2024/04/25(木)17:42 ID:ddMre8ET(3/4) AAS
>>306 一理ある。初心者は気を遣うことを覚えるより完成させることを優先しろ、オレの先輩の言葉
>>307 配列のIndexを返したいって話だから、Vec2はオーバーキルだと思うぞ。ぶっちゃけやってることは同じだしわかりやすい方でいいんだけどさ。This is KISS.
309: 2024/04/25(木)18:26 ID:Esvk0j05(6/6) AAS
すまん、どちらか一方にするよ
redditはそれにしても人多いねぇ
310: 2024/04/25(木)18:43 ID:/XEpAv2m(1) AAS
つーかマルチポストで聞く暇あるなら少しは勉強しろよ
初歩的な問題で詰んでるなら尚更
311(1): 2024/04/25(木)20:20 ID:7TwSlN/Q(4/4) AAS
>>308
質問のみならそうなのだが話題の元が倉庫番作るのにキャラ座標をマップ配列に変換するなのでそこまで含むと解答はこうなる
func cpos_to_mpos(cpos:Vector2i, size:int = 32) -> Vector2i:
return cpos / size
312: 2024/04/25(木)21:13 ID:ddMre8ET(4/4) AAS
おー、なるほどね!
Vector2iって勝手にTrancateしてくれるんだな、勉強になったわ
313(1): 2024/04/26(金)06:09 ID:1Ez+K35D(1/3) AAS
>>311
すみません
なんか自己流で複雑なやり方になってる気がする
普通はキャラ座標とマップ座標の変換はやらずに、座標を1つに統一したりするんでしょうか
314(2): 2024/04/26(金)13:14 ID:yaANzBxw(1) AAS
上の人も書いてるけど倉庫番と言うことはグリッドの途中で立ち止まる事はないだろうから、それであれば32で割った盤面上の座標だけ保持して画面表示の時に32倍するなりアニメ補間すればよいのでは
その方がセーブやアンドゥも楽になる
315(1): 2024/04/26(金)13:46 ID:1Ez+K35D(2/3) AAS
>>314
配列使わないということですか?
配列使わない場合、障害物の位置などを表現する場合、どうするでしょうか
二次元配列を使った場合、以下のようにマップを表現すると思います
1=壁,2=キャラ、3=動かせる箱、0=動ける範囲
[
[1,2,3,0,1],
[1,0,0,0,1],
[1,1,1,1,1],
]
グリッドの途中で立ち止まらないというのは、32ずつグリッド移動するという意味ですよね。
1pxずつ動かしたいわけじゃないので、それはその通りです。
316: 2024/04/26(金)13:52 ID:XXsncJVJ(1) AAS
もしかしてモブはスプライト管理じゃない?
317(1): 2024/04/26(金)14:35 ID:/ZFKx6UF(1/2) AAS
>>315
倉庫番である以上オブジェクトは必ず格子状に配置し管理される
それを2次元配列とみなす事ができる
配列を使わない場合は遠回りに配列があるのと同等の処理を行うだけ
なぜ>>314の説明で配列使わないという解釈になるのかが判らない
配列を使わない便利な魔法でもあると想像してないか?
配列を使わない方法があっても手間が増えて複雑になるだけだから配列が使われる
配列を使った方法で理解するのが定番
318: 2024/04/26(金)14:55 ID:/ZFKx6UF(2/2) AAS
>>313
昔はコンソール上で動かす前提で表示もキャラクター単位だったので
配列の要素番号と表示座標の変換は不要だった
今はウインドウアプリになって表示に座標変換は必須
ウインドウアプリの作法も覚えなきゃで同じ倉庫番の初心者講習でも
昔よりは複雑になり難易度上がってはいる
319: 2024/04/26(金)15:42 ID:86tvu5TE(1/2) AAS
絵文字使ってるので表示が上手くいかなかったらごめん
ゲームとしては全然足りないし完成させる所までが課題ではあるが
学習項目を配列のみに集約するとこの配列操作が理解できれば十分
func _ready():
var map = "🧱👷📦🚩🧱\n"
print(map)
map[3] = map[2]
map[2] = map[1]
map[1] = "◾"
print(map)
320: 2024/04/26(金)15:45 ID:86tvu5TE(2/2) AAS
二次元配列まで理解できたら上出来
func _ready():
var map = ["🧱🧱🧱", "🧱👷🧱", "🧱📦🧱", "🧱🚩🧱", "🧱🧱🧱", "\n"]
for c in map: print(c)
map[3][1] = map[2][1]
map[2][1] = map[1][1]
map[1][1] = "◾"
for c in map: print(c)
上下前次1-新書関写板覧索設栞歴
あと 682 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.022s