:: เว็บหลักโรงเรียนบ้านโนนขาม ::

วันศุกร์ที่ 23 กันยายน พ.ศ. 2554

สำหรับมือใหม่หรือผู้ที่มีหัวใจ Flash (ทำ CAI, Games ฯลฯ)

           ตัวอย่างดีๆ   จากคุณฮาร์ด  และ web ต่อไปนี้   ลองดูครับ






อันนี้เราเพิ่มพวกการเช็คชนและระบบฟิสิกส์เข้าไปนิดหน่อยนะครับ โดยเพิ่มโคทและแก้ตรงโน้นนิดตรงนี้หน่อยเข้าไป มาดูกันว่ามีไรเพิ่มบ้าง


ภายในซิมโบลตัวละครของเรา เราสร้างซิมโบลสี่เหลื่ยมขึ้นมาแล้วใส่ชื่อ 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  โหลดตัวอย่างไปลอง