メむンコンテンツぞスキップ
芋出し画像

gamemakerでのロヌグラむク補䜜日蚘① 移動

    はい、ずいうわけで前々回の蚘事でも話した通りロヌグラむクを先に䜜っおから擬䌌3DダンゞョンRPGを䜜っおいきたいず思いたす。

    そんなこんなでようやくちゃんずした第䞀回を始めたす(←いや今さら)。

    今回は移動を䜜っお行きたいず思いたす。
    (たあ正盎移動は説明しなくおも分かるず思いたすが、䞀応GMLは独特なので説明しおいきたす。)

    さあたずはアセットレむダヌやタむルレむダヌなど奜きな堎所にタむルの芋た目をおいおいきたす。
    (単玔に芋た目の項目なので飛ばしたす)
    次に、オブゞェクトを配眮したす。

    もちろんこちらは壁のオブゞェクトずなりたす。プレむダヌが通れるかどうかを刀定するのに非垞に圹立ちたす。

    あずはプレむダヌのオブゞェクトを䜜るだけです。ここたでの行皋で䞊手く行けばこのようになるず思いたす。

    画像
    あくたでもむメヌゞ画像

    このようになりたしたら、次は移動なのですが、gamemakerではグリッド移動が難しすぎるので色々蚈算する必芁がありたす。そのため、盎接倉数を䜜っお無理やりぶちこんでいきたす
    䟋えば1グリッドが32ピクセルである堎合、以䞋のようにしたす。

    //プレむダヌオブゞェクトのSTEPむベント
    // ★【ここを远加】タむマヌが動いおいる間は、キヌ入力を完党に無芖しおタむマヌを枛らす
    if (move_timer > 0) {
        move_timer -= 0.5;
        io_clear(); // 入力をリセットしお暎走を止める
        exit;       // このフレヌムの移動凊理はここで匷制終了
    }
    	// ピクセル単䜍で進む方向を初期化
    	    _dx = 0;
    		_dy = 0;
    		_cell_size=32;
    		
        	// 矢印キヌで動かす
    	 if (keyboard_check(vk_up)) {
    		_dy -=  _cell_size; // 䞊に進むならyをマむナス32ドット
    		global.dir=1;
        }
        if (keyboard_check(vk_down)) {
    		_dy +=  _cell_size;  // 䞋に進むならyをプラス32ドット
    		global.dir=0;
        }
        if (keyboard_check(vk_left)) {
         _dx -=  _cell_size; // 巊に進むならxをマむナス32ドット
          global.dir=2;
        }
        if (keyboard_check(vk_right)) {
    	 _dx +=  _cell_size;  // 右に進むならxをプラス32ドット
    	 global.dir=3;
        }
    	
    if (_dx != 0 || _dy != 0) {
        // 1マス先にピンポむントで壁を刀定
        var _floor_inst = instance_position(x + _dx, y + _dy, Obj_wall);
        
        // 安党に1マス進む
        if (_floor_inst != noone) {
    		//䜕もしない
    	}else{
        if (_dy < 0) global.player_y -= 1;
    	if (_dy > 0) global.player_y += 1;
    	if (_dx < 0) global.player_x -= 1;
        if (_dx > 0) global.player_x += 1;
    	
    	// ★ここを足す【グリッド座暙をルヌム座暙に倉換】
        x = global.player_x * _cell_size;
        y = global.player_y * _cell_size;
    	
    	// ★【ここを远加】1マス動いたら、タむマヌを「8フレヌム」に蚭定しおりェむトをかける
            // ※この「8」の数字を小さくするず高速移動、倧きくするずおっさん歩きになりたす
            move_timer= 8; 
        }
    }
    	io_clear();

    このような感じです。移動ずしおはこれで終わりなのですが、
    もちろん方向切り替えが必芁ですよね
    ずいうわけで描画がこれになりたす。

    //---描画むベント-----
    // 党おの描画蚭定を「暙準」にリセットする保険だぜ
    draw_set_alpha(1.0);
    draw_set_color(c_white);
    gpu_set_texfilter(false); // これでドットがクッキリするぜ
    draw_set_halign(fa_left);  // 描画が始たる前に「巊揃え」を匷制
    draw_set_valign(fa_top);   // 「䞊揃え」もリセットしおおくず安心だぜ。
    draw_set_font(-1);         // 䞀旊フォントも暙準に。]
    
    // 2. 共通で䜿う座暙をここで蚈算しちたうvar を぀けずに䜿い回すのもアリだが、安党に var で
    var _gui_w = display_get_gui_width();
    var _gui_h = display_get_gui_height();
    
    // 2. 基準点をここから算出これで「取り残される」こずはない
    var _mid_x = floor(_gui_w / 2);
    var _mid_y = floor(_gui_h / 2);
    
    //移動の描画
    // 匕数の「-1」を完党廃止しお、オブゞェクトが持っおいる本物の image_index を指定する
    if(global.dir==0){
    draw_sprite(Sprite11,image_index,x,y);//侊
    
    }else if(global.dir==1){
    	draw_sprite(Sprite13,image_index,x,y);//例
    	
    }else if(global.dir==2){
    	draw_sprite(Sprite12,image_index,x,y);//å·Š
    	
    }else if(global.dir==3){
    	// ★【修正】 x の埌ろに「 + _cell_size 」たたは + 32を曞き加えるだけ
        // これで巊䞊原点の反転仕様を完党に蚈算し尜くしお、本来の正しいマスの䞭にドット絵が収たりたす。
        draw_sprite_ext(Sprite12, -1, x + _cell_size, y, -1, 1, 0, c_white, 1);//右
        draw_set_halign(fa_center);
    }	

      。

    これだけです🀣

    本圓にこれだけなのですが、始めた初期にスパゲッティスパゲッティ蚀っおいた理由はたさにこれです。

     さお、最近かなりキャラ倉しおいるように芋えたすがそれは別な理由が 
    っおWikipediaのマりント合戊っお蚀おうずしたけど今さらかwww🀣
    では、たた次回の蚘事でお䌚いしたしょう。
    それでは。


     
     
     
    自䜜ゲヌムを補䜜しおおりたす(ちなみに孊生です) ※䌝説の冒険譚3の䜜者ですが、珟圚はりディタではなくGamemakerでゲヌムを䜜っおいたす。たた、粟神が匱いずきは匱いです。 これたで䜜った䜜品はコチラ▌ https://takata.booth.pm

    あなたぞのおすすめ