วิธีการแรสเตอร์มูวี่คลิปที่มีการเคลื่อนไหว by

30
Apr
1

ในปกติส่วนต่างที่เราใช้แสดงในแฟลชนั้นจะเป็นการแสดงผลของเวคเตอร์ คือเป็นข้อมูลรูปที่ซูมเข้าและออกแล้วไม่มีการแตก แต่ถ้าเรามีจำนวนเวคเตอร์ที่มีการเคลื่อนไหวมากๆนั้นจะทำให้แฟลชของเรามีอาการกระตุก ซึ่งวิธีแก้ก็คือทำการแรสเตอร์เวคเตอร์ตัวนั้นให้เป็นบิทแม็พ หรือเป็นภาพๆหนึ่งเท่านั้น ซึ่งจะทำให้ภาพนั้นคงที่ซูมแล้วก็จะแตก และอาจจะใช้เวลาโหลดนานกว่าเดิมแต่มันจะไม่ทำให้แฟลชของเรากระตุกครับ ซึ่งปกติแล้วการแรสเตอร์จะทำให้เวคเตอร์ ณ เวลาหนึ่งกลายเป็นภาพหนึ่งภาพ แล้วถ้าเราจะแปลงมูฟวี่คลิปที่มีการเคลื่อนไหวให้กลายเป็นบิทแมพที่มีการเคลื่อนไหวบ้างล่ะเราจะทำอย่างไร วันนี้ผมมีคลาสตัวหนึ่งมาเสนอครับ

AS3 Animation Class

คลาส AS3 Animation สร้างโดยเว็ป efnx.com โดยคลาสนี้จะมีฟังก์ชั่นต่างๆที่เอาไว้รับบิทแมพหลายๆตัวแล้วแปลงออกมาให้เป็นบิทแม็พที่เคลื่อนไหวได้ครับ

ดาวน์โหลดได้ที่ blogefnxcom-animation.zip

วิธีการใช้

Animation จะมีพารามิเตอร์ 3 ค่านะครับซึ่งไม่จำเป็ฯต้องมีก็ได้คือ numFrames:int = 1 width:int = 0 และ height:int = 0

ซึ่งในการนำมาใช้ก็เริ่มจากการอิมพอร์ทและสร้างตัวแปรกันก่อนเลยครับ

import com.efnx.utils.Animation;     //ทำการอิมพอร์ตคลาส

var character:Animation = new Animation();     //สร้างตัวแปร

ในขั้นถัดมาเราจะต้องทำการแรสเตอร์มูวี่คลิปของเรานะครับบ แล้วจึงนำไปใส่อนิเมชั่น สมมติว่ามูวี่คลิปของเราชื่้อ myMC นะครับ

var i:int;

for(i = 1;i<=myMC.totalFrames;i++){ //สร้างการวนลูปทำตามจำนวนครั้งของเฟรมในมูวี่คลิปของเรา

var bitmapData:BitmapData = new BitmapData(myMC.width,myMC.height); //สร้างบิทแมพดาต้าให้มีขนาดเท่ากับมูวี่คลิปของเรา

bitmapData.draw(myMC); //ทำการวาดมูวี่คลิปของเราให้เป็นบิทแมพครับ

character.appendBitmapData(i,bitmapData);  //เป็นคำสั่งของคลาส Animation ให้ทำการเก็บบิทแมพที่ได้วาดแล้วโดยมีการใส่พารามิเตอร์สองตัวคือ เฟรมที่ และ บิทแม็พดาต้าของเรา ซึ่งในที่นี้ก็คือ i หรือก็คือเฟรมของมูฟวี่คลิปและบิทแม็พดาต้าที่เราได้วาดในบรรทัดก่อนหน้า

myMC.nextFrame(); //ทำการเลื่อนเฟรมของมูฟวี่คลิปของเราเป็นเฟรมถัดไปเพื่อที่จะได้ทำการใส่บิทแม็พเพิ่ม

}

ต่อมาเราสามารถใส่ฟังก์ชั่นที่จะถูกเรียกเมื่อเข้าเฟรมนั้นๆได้ด้วยครับ (ทำงานคล้ายกับการเรียกอีเว้นในมูฟวี่คลิป)

character.appendFrameScript(myMC.totalFrames,repeat); //ทำการเรียกฟังก์ชั่นที่ชื่อ repeat ในเฟรมสุดท้ายของของตัวแปร Animation ของเรา

ซึ่งโดยปกติแล้ว Animation จะทำการเล่นเพียงรอบเดียวฉะนั้นสิ่งที่เราจะทำคือ เมื่อรันไปถึงเฟรทสุดท้ายแล้วให้กลับไปเล่นเฟรมแรกใหม่โดยจากโค้ดด้านบนเราทำการเพิ่มการเรียกฟังก์ชั่นที่จะทำงานเมื่อเข้าสูเฟรมสุดท้ายแล้ว เราก็จะทำฟังก์ชั่น repeat ดังนี้

function repeat():void
{
character.gotoAndPlay(1); // ฟังก์ชั่นของ Animation ที่ชื่อและการทำงานเหมือนกับของมูฟวี่คลิปเลยครับ ซึ่งก็คือกลับไปเฟรมแรกใหม่
}

เพียงเท่านี้ตัวแปร character ที่มีคลาสเป็น Animation ก็จะมีหน้าตาที่เหมือนกับมูฟวี่คลิป myMC แต่เพียงเปลี่ยนเป็นบิทแมพแล้วล่ะครับ
ศึกษาเพิ่มเติมได้จาก AS3 Animation Class to Replace Movieclip

วิธีแก้เมื่อ app facebook error ว่า Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user by

29
Apr
6

สืบเนื่องจากโปรเจกการฝึกงานของผมคือการทำ application ขึ้น Facebook โดยใช้ php-sdk และ javascript-sdk ในการทำ แต่เมื่อทำเสร็จและอัพขึ้น Facebook เรียบร้อย เมื่อตอนที่กำลังจะเข้าขั้นตอนเพื่อขอ permission กลับเกิด error พิสดารขึ้นมาว่า
Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user.thrown in xxxxx(ที่อยู่แอพเราบน server)/facebook.php line 560 (บางคนก็เกิดที่บรรทัดอื่น แต่เชื่อว่าน่าจะมาจากสาเหตุเดียวกัน) ซึ่ง error นี้เกิดจากการที่ user ยังไม่ได้ log in เข้า Facebook หรืออาจจะเป็น access token ที่มีนั้นหมดอายุไปแล้ว ซึ่งวิธีแก้ก็คือลองเรียก session Facebook ออกมาดู ถ้า session ไม่สามารถใช้ได้ให้ redirect ไปยังหน้า login ก่อน อธิบายไปอาจไม่เห็นภาพเรามาดูโค้ดดีกว่า

$facebook = new Facebook(array(
‘appId’  => $appId,
‘secret’ => $secret,
‘cookie’ => true,
));

$redirect_url = $facebook->getLoginUrl(array(‘canvas’ => 1,
‘fbconnect’ => 0,
‘next’ => $start_page(page ที่จะไปเมื่อ log in เสร็จ)
));

$session = $facebook->getSession();

if($session) {
    // i am logged in
    $this->me = $facebook->api('/me?access_token='.$session['access_token']);
 } else {
    // not logged in
    echo '<script type="text/javascript">top.location.href = \''.$redirect_url.'\';</script>';
}

ซึ่งโค้ดข้างต้นสามารถแก้ปัญหา error ดังกล่าวได้เป็นอย่างดี ทว่ามีบางกรณีที่ยังเกิด error อยู่ก็คือ cookie ที่ใช้เก็บ session ในขณะนั้น ซึ่งบางครั้งที่เราปิด browser ไปแต่
cookie ยังคงเก็บค่าไว้ วิธีแก้ก็คือก่อนจะทำการเรียก session ใหม่ ให้ทำการลบ cookie เดิมของแอพนี้ออกก่อน ดังนี้

if ($session) {
      try {
      $me = $facebook->api('/me?access_token='.$session['access_token']);
     } catch (FacebookApiException $e) {
       error_log($e);
       unset($_COOKIE['fbs_' .$appId]);
      $facebook = new Facebook(array(
       'appId'  => $appId,
        'secret' => $secret,
         'cookie' => true,
         ));
         $session = $facebook->getSession();
         $me = $facebook->api('/me?access_token='.$session['access_token']);
        }
     }

 อ้างอิง
http://forum.developers.facebook.net/viewtopic.php?id=95536

การหาความเร็วในการเลื่อน mouse ใน Action Script 3.0 by

29
Apr
0

หลายๆคนที่ใช้ Action Script  3.0 ในการสร้าง flash อาจสงสัยถึงวิธีการหาค่าความเร็วในการเลื่อน mouse ของผู้ใช้ขณะนั้น

เพราะมีแต่ mouseX และ mouseY ที่เป็นตัวบอกตำแหน่งของ mouse เท่านั้น แต่เราสามารถใช้ตำแหน่งนั้นมาหาความเร็วได้ ดัง class ตัวอย่างนี้

public class MouseSpeed extends Sprite
{
        private var newY:Number = 0;
        private var oldY:Number = 0;
        public var ySpeed:Number;
        private var newX:Number = 0;
        private var oldX:Number = 0;
        public var xSpeed:Number;

        public function MouseSpeed()
        {
	        this.addEventListener(Event.ENTER_FRAME, calculateMouseSpeed);
        }

        private function calculateMouseSpeed(e:Event)
        {
	        newY = mouseY;
	        ySpeed = newY - oldY;
	        oldY = newY;

	        newX = mouseX;
	        xSpeed = newX - oldX;
	        oldX = newX;
        }

        public function getYSpeed():Number
        {
	        return ySpeed;
        }

        public function getXSpeed():Number
        {
	        return xSpeed;
        }
}

โดยหลักการก็คือ การหาตำแหน่งของ mouse ใน frame ก่อนหน้านั้นกับตำแหน่งในเฟรมปัจจุบัน เพื่อหาระยะทางที่ mouse เคลื่อนที่ใน 1 frame นั่นเอง

ผู้อ่านสามารถนำ class นี้ไปใช้ได้ทันที โดย function getXSpeed จะ return ค่าความเร็วของ mouse ในแกน X และ getYSpeed จะเป็นของแกน Y ซึ่งจะเป็นชนิด Number

สุดท้าย เมื่อหาความเร็วของ mouse ได้ ก็จะสามารถนำไปใช้ได้หลายแบบ ไม่ว่าจะเป็นการจับวัตถุเขวี้ยง หรือการเลื่อนวัตถุไปชนในความเร็วที่ต่างกันได้ครับ

อ้างอิง

http://www.quasiuseful.com/

สร้าง animation ง่ายๆ บน Photoshop CS5 by

29
Apr
3

หัวข้อที่ผ่านมาเป็นการสร้างสายฝนให้รูปภาพด้วยโปรแกรม photoshop ..ไหนๆก็เข้าหน้าฝนแล้วมาทำให้ภาพสายฝนทื่อๆดูมีชีวิตชีวาด้วย animation tool ดีกว่า

นี่คือ ภาพเดิมของหัวข้อที่แล้ว

bicycle

เราจะมาทำให้มันแบบแบบนี้ “”

bicycle-ani

ARPU คืออะไร และ Social Game มี ARPU เฉลี่ยเท่าไร by

2
Apr
1

ARPU (Average Revenue Per User) คือปริมาณรายได้ต่อจำนวนคนทั้งหมดในเกม ใช้เป็นค่าที่ประเมินได้ระดับนึงว่าเกมเราสามารถสร้างรายได้มากน้อยเพียงใด

ตัวอย่าง ARPU บน Social Game:

เกมประเภททำฟาร์ม: $0.1-$0.2

เกมประเภท Mafia Wars:  : $0.25-$1

เกมประเภทสร้างเมือง: <$0.1

เกมประเภทพนัน (poker, lottery, slots): $0.25-$1

ข้อมูลนี้นับจากวันที่ 7 พฤษภาคม 2010 อาจจะเก่าไปหน่อย แต่ก็พอใช้อ้างอิงได้บ้าง

ที่มา: http://www.gamasutra.com/view/news/28456/GDC_Canada_Super_Rewards_Bailey_Quit_Your_Job_And_Make_Facebook_Games.php

กู้เงิน | เศรษฐกิจพอเพียง | สินเชื่อบุคคล | สมัครบัตรกดเงินสด | สินเชื่อ | เงินกู้ด่วน | ยืมเงินทรูมูฟ | เงินด่วนนอกระบบ