วิธีการแรสเตอร์มูวี่คลิปที่มีการเคลื่อนไหว by Ziah
Apr1
ในปกติส่วนต่างที่เราใช้แสดงในแฟลชนั้นจะเป็นการแสดงผลของเวคเตอร์ คือเป็นข้อมูลรูปที่ซูมเข้าและออกแล้วไม่มีการแตก แต่ถ้าเรามีจำนวนเวคเตอร์ที่มีการเคลื่อนไหวมากๆนั้นจะทำให้แฟลชของเรามีอาการกระตุก ซึ่งวิธีแก้ก็คือทำการแรสเตอร์เวคเตอร์ตัวนั้นให้เป็นบิทแม็พ หรือเป็นภาพๆหนึ่งเท่านั้น ซึ่งจะทำให้ภาพนั้นคงที่ซูมแล้วก็จะแตก และอาจจะใช้เวลาโหลดนานกว่าเดิมแต่มันจะไม่ทำให้แฟลชของเรากระตุกครับ ซึ่งปกติแล้วการแรสเตอร์จะทำให้เวคเตอร์ ณ เวลาหนึ่งกลายเป็นภาพหนึ่งภาพ แล้วถ้าเราจะแปลงมูฟวี่คลิปที่มีการเคลื่อนไหวให้กลายเป็นบิทแมพที่มีการเคลื่อนไหวบ้างล่ะเราจะทำอย่างไร วันนี้ผมมีคลาสตัวหนึ่งมาเสนอครับ
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 sekson
Apr6
สืบเนื่องจากโปรเจกการฝึกงานของผมคือการทำ 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 nandanai
Apr0
หลายๆคนที่ใช้ 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 ได้ ก็จะสามารถนำไปใช้ได้หลายแบบ ไม่ว่าจะเป็นการจับวัตถุเขวี้ยง หรือการเลื่อนวัตถุไปชนในความเร็วที่ต่างกันได้ครับ
อ้างอิง
สร้าง animation ง่ายๆ บน Photoshop CS5 by pinkorawin
Apr3
หัวข้อที่ผ่านมาเป็นการสร้างสายฝนให้รูปภาพด้วยโปรแกรม photoshop ..ไหนๆก็เข้าหน้าฝนแล้วมาทำให้ภาพสายฝนทื่อๆดูมีชีวิตชีวาด้วย animation tool ดีกว่า
นี่คือ ภาพเดิมของหัวข้อที่แล้ว
เราจะมาทำให้มันแบบแบบนี้ “”
ARPU คืออะไร และ Social Game มี ARPU เฉลี่ยเท่าไร by heha
Apr1
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 อาจจะเก่าไปหน่อย แต่ก็พอใช้อ้างอิงได้บ้าง