12-26-2022, 06:21 PM
เราสามารถเก็บตำแหน่งเมาส์ไว้ในตัวแปร และ สามารถแปลงตำแหน่งดังกล่าวไปเป็นตำแหน่งในแผนที่ได้ด้วย
โดยใช้ Event ตามด้านล่างนี้ (ตั้ง Event เป็น Parallel เพื่อรับอัพเดทค่าทุกเฟรม)
ระบบนี้สามารถนำไปประยุกต์ใช้ในการสร้างเกมได้หลายแนว เช่น เกมสร้างเมือง หรือเกม RTS ที่ต้องควบคุมยูนิตไปยังจุดต่างๆบนแผนที่
ตัวอย่างที่ 1: ใช้ในการทำให้ตัวละครเดินไปยังจุดที่คลิก (ขอบคุณเคล็ดลับจากท่าน Madon Nopora)
สร้าง Event ที่จะใช้เดินไปยังตำแแหน่งที่คลิก แล้วตั้งเป็น Parallel
ใส่โค้ดในการสั่ง Move Route Event ดังนี้ (ตัวแปร 3 กับ 4 ใช้ต่อเนื่องมาจากด้านบน)
เนื่องจาก Search Limit มีระยะจำกัด เราจึงจำเป็นต้องแก้ไขตัวเอนจิ้นเล็กน้อยเพื่อให้หาเส้นทางได้ดีขึ้น (ปรับตามความเหมาะสม)
ตัวอย่างที่ 2: ใช้ในการ Spawn Event ในแผนที่ (เหมือนระบบสร้างสิ่งก่อสร้าง)
สร้าง Event ที่จะใช้เป็น Spawner แล้วตั้งเป็น Parallel (Event นี้ใช้ในการ Spawn Event ตัวอื่น)
ใส่โค้ดใน Event Script ดังนี้ (ตัวแปร 3 กับ 4 ใช้ต่อเนื่องมาจากด้านบน)
ตรง new Game_Event(ไอดีของแมพ, ไอดีของอีเว้นต้นแบบ)
โดยใช้ Event ตามด้านล่างนี้ (ตั้ง Event เป็น Parallel เพื่อรับอัพเดทค่าทุกเฟรม)
ระบบนี้สามารถนำไปประยุกต์ใช้ในการสร้างเกมได้หลายแนว เช่น เกมสร้างเมือง หรือเกม RTS ที่ต้องควบคุมยูนิตไปยังจุดต่างๆบนแผนที่
Code:
TouchInput.x
$gameMap.canvasToMapX($gameVariables.value(1))
$gameMap.canvasToMapX(TouchInput.x)
TouchInput.isPressed()
ตัวอย่างที่ 1: ใช้ในการทำให้ตัวละครเดินไปยังจุดที่คลิก (ขอบคุณเคล็ดลับจากท่าน Madon Nopora)
สร้าง Event ที่จะใช้เดินไปยังตำแแหน่งที่คลิก แล้วตั้งเป็น Parallel
ใส่โค้ดในการสั่ง Move Route Event ดังนี้ (ตัวแปร 3 กับ 4 ใช้ต่อเนื่องมาจากด้านบน)
Code:
this.moveStraight(this.findDirectionTo($gameVariables.value(3), $gameVariables.value(4)));
เนื่องจาก Search Limit มีระยะจำกัด เราจึงจำเป็นต้องแก้ไขตัวเอนจิ้นเล็กน้อยเพื่อให้หาเส้นทางได้ดีขึ้น (ปรับตามความเหมาะสม)
Code:
Game_Character.prototype.searchLimit = function() {
return 999;//12;
};
ตัวอย่างที่ 2: ใช้ในการ Spawn Event ในแผนที่ (เหมือนระบบสร้างสิ่งก่อสร้าง)
สร้าง Event ที่จะใช้เป็น Spawner แล้วตั้งเป็น Parallel (Event นี้ใช้ในการ Spawn Event ตัวอื่น)
ใส่โค้ดใน Event Script ดังนี้ (ตัวแปร 3 กับ 4 ใช้ต่อเนื่องมาจากด้านบน)
ตรง new Game_Event(ไอดีของแมพ, ไอดีของอีเว้นต้นแบบ)
Code:
var eid = $gameMap._events.length;
var sid = SceneManager._scene._spriteset._characterSprites.length;
var event = $gameMap._events[eid] = new Game_Event($gameMap._mapId, 15);
event.locate($gameVariables.value(3), $gameVariables.value(4));
var spriteset = SceneManager._scene._spriteset;
var sprite = spriteset._characterSprites[sid] = new Sprite_Character(event);
sprite.update();
spriteset._tilemap.addChild(sprite);