[過去ログ] 【軽量】godot engine【無料】 part3 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
287: 2024/04/24(水)04:23 ID:oxZnmf8P(1/2) AAS
 >>281 
 なるほど 中で宣言するというだけですね 
288: 2024/04/24(水)20:15 ID:oxZnmf8P(2/2) AAS
 倉庫番のロジックで分からないところがあるのでこっちで質問させてもらいます 
 マップは二次元配列で作成します 
 ただ、キャラクターの移動はvector2で行います 
1マスの大きさが32であった場合、vector2の座標が32,0だとしたら、配列上ではarray[y0][x1]となりますよね。 
 こういった変換に便利な関数とかないでしょうか? 
  
 やりたいことを箇条書きにすると以下です 
 1:vector2の座標から配列上の座標を割り出す 
 2:キャラクターが移動したとき、配列上のキャラクター座標を移動させる(配列上の要素2がキャラとしてます) 
289(1): 2024/04/24(水)20:27 ID:PzjnMMaW(1) AAS
 普通に割り算して切り捨てるだけでは 
 ものを1マス単位で動かさない前提なら1マス辺りの座標を1にして逆に見た目の方の座標を掛け算なりする方が楽 
290: 2024/04/24(水)22:41 ID:YL8z0NQ2(1) AAS
 自分が便利なように関数かけばいいじゃないの  
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
 もしかしてモブはスプライト管理じゃない? 
上下前次1-新書関写板覧索設栞歴
あと 686 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.028s