อันนี้เราเพิ่มพวกการเช็คชนและระบบฟิสิกส์เข้าไปนิดหน่อยนะครับ โดยเพิ่มโคทและแก้ตรงโน้นนิดตรงนี้หน่อยเข้าไป
มาดูกันว่ามีไรเพิ่มบ้าง
ภายในซิมโบลตัวละครของเรา เราสร้างซิมโบลสี่เหลื่ยมขึ้นมาแล้วใส่ชื่อ
instance เข้าไปแล้ววางตำแหน่งประมาณนี้ กล่องพวกนี้เราเอาไว้ให้ตัวละครของเราเช็คชนด้านต่างๆ
ตรงคีย์เฟรมแรกในตัวละคร ประกาศตัวแปรนี้ลงไป
var VelY = 0;
// แรงเฉื่อยแนว Y
var VelX = _x;
// แรงเฉื่อยแนว X
var OnAir =
true; // ตัวแปรไว้เก็บค่าสำหรับเช็คว่าลอยอยู่กลางอากาศหรือเปล่า
ตรงซิมโบลกล่องสี่ส้มๆคือตัวเช็คชน สร้างเฟรมที่ 2 แล้วใส่คำสั่ง
_root.BlockList[_root.NumBlock]
= this;
_root.NumBlock
+= 1;
stop();
เว้นเฟรมแรกไว้เฉยๆนะ
กลับมาดูที่ scene หลักสร้างฟังชั่นสำหรับเช็คชน
function WorldCheck(obj) {
obj.OnAir = true;
obj._y += obj.VelY;
obj._x += (obj.VelX-obj._x)/10;
for (i=0; i<_root.BlockList.length; i++) {
if (obj.Bfloor.hitTest(_root.BlockList[i])) {
obj._y = _root.BlockList[i]._y;
obj.OnAir = false;
}
if (obj.Bhead.hitTest(_root.BlockList[i])) {
obj.VelY = Gravity;
}
if (obj.Bleft.hitTest(_root.BlockList[i])) {
obj.VelX = obj._x;
obj._x =
obj._x+(2*obj._xscale/Math.abs(_xscale));
}
if (obj.Bright.hitTest(_root.BlockList[i])) {
obj.VelX = obj._x;
obj._x =
obj._x-(2*obj._xscale/Math.abs(_xscale));
}
}
if (obj.OnAir) {
obj.VelY += _root.Gravity;
}
}
ที่ต้องสร้างเป็นฟังชั่นเพราะเผื่อไว้ให้พวกตัวละครอื่นๆ หรือ NPC ไว้เช็คชนด้วย
player คือชื่อ instance ของซิมโบลตัวละครเรา
ตรง Frame 1
var
Speed:Number = 5;
var
BlockList:Array = new Array(); // ตัวแปรไว้เก็บ list ของตัวเช็คชน
var Gravity =
1;
var NumBlock =
0;
เว้นเฟรมแรก 1 เฟรมแล้วสั่ง stop ที่ frame 2 เพราะว่าเอาไว้ประกาศตัวแปรเริ่มต้น
เช่น HP MP SP mana อะไรต่อมิอะไรที่เกมใช้และฟังชั่นต่างๆเป็นส่วน
Initialize
onEnterFrame = function () {
if
(Key.isDown(Key.LEFT)) {
_root.player._xscale = 100;
_root.player.VelX -=
Speed;
_root.player.gotoAndPlay("run");
}
if
(Key.isDown(Key.RIGHT)) {
_root.player._xscale =
-100;
_root.player.VelX +=
Speed;
_root.player.gotoAndPlay("run");
}
if
(Key.isDown(Key.UP)) {
if (!_root.player.OnAir) {
_root.player.VelY = -20;
_root.player.OnAir = true;
}
}
if (_root.player._x>=800) {
_root.player._x = 10;
_root.player.VelX = _root.player._x;
_root.NumBlock
= 0;
_root.nextFrame();
}
if (_root.player._x<=0) {
_root.player._x = 790;
_root.player.VelX = _root.player._x;
_root.NumBlock
= 0;
_root.prevFrame();
}
_root.WorldCheck(_root.player);
//เรียกใช้ฟั้งชั่นเช็คชนที่เราทำไว้ ใส่ชื่อของตัวละครเราเข้าไป
สำหรับพวก NPC อื่นๆ ก็แค่ประกาศ//ชื่อ instance ซะแล้วส่งค่าไปแบบ player นี้แหละ
};
โหลดตัวอย่างไปดูดีกว่า
Basic Side Scrolling Game
เริ่มต้นด้วยของที่ง่ายสุดๆกับ การควบคุมตัวละครแนวแกน X หรือที่เรียกว่าเกมแนวมาริโอ้นั้นเอง นี่เป็นตัวอย่างที่ง่ายที่สุด
เอาของง่ายๆไปก่อนละกันนะคับ คือผมเชื่อว่ามีหลายคนกำลังมองหาอะไรคล้ายๆแบบนี้ แต่ในตัวอย่างต่อไปเราจะเพิ่มพวก Physic การเช็คชน และแรงโน้มถ่วงเข้าไป ตัวละครของเราจะได้กระโดดได้
var Speed:Number = 3;
onEnterFrame = function () {
if (Key.isDown(Key.LEFT)) {
_root.player._xscale = 100;
_root.player._x -= Speed;
_root.player.gotoAndPlay("run");
}
if (Key.isDown(Key.RIGHT)) {
_root.player._xscale = -100;
_root.player._x += Speed;
_root.player.gotoAndPlay("run");
}
};
โคทมีแค่นี้เอง พิมใส่ในเฟรมแรกของเรา อย่าลืมเซตเฟรมเรตไว้สัก 50 นะภาพจะได้ลื่นๆตา
_root.player คือ ชื่อ instance ที่เราตั้งให้ตรง properties
โหลดตัวอย่างไปเปิดดูเลย ครับ ในนี้ผมโพสคร่าวๆ คือเราจะไม่เน้นพาทำทีละขั้นแต่จะให้ค่อยๆแจกตัวอย่างให้ไปเปิดดูประกอบกันเองเลยเป็นวิธีที่ง่ายสุด
http://www.ziddu.com/download/14492685/BasicSideScrolling.rar.html โหลดตัวอย่างไปลอง