1. 需要 manage_notifications permission
2. 需為 canvas app
step1. 取得 app access_token
https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=client_credentials
step2. call Notifications API
1. 需要 manage_notifications permission
2. 需為 canvas app
step1. 取得 app access_token
https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=client_credentials
step2. call Notifications API
最近在win7 64bit上使用flash cs5 (英文版),
卻發現cs3, cs4(中文版)的extensions無法順利安裝在cs5上,
查了很久發現是路徑問題,
package{ import flash.display.Sprite; import flash.events.Event; import jp.progression.commands.lists.SerialList; import mat.progression.commands.DoAlphaIn; import mat.progression.commands.DoAlphaOut; import org.papervision3d.core.proto.MaterialObject3D; import org.papervision3d.events.FileLoadEvent; import org.papervision3d.events.InteractiveScene3DEvent; import org.papervision3d.materials.BitmapFileMaterial; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.parsers.DAE; import org.papervision3d.view.BasicView; public class LoadModel extends Sprite { private var view :BasicView; private var dae :DAE;//DAE物件 private var _bol :Boolean = false; public function LoadModel(){ init3DEngine(); init3DObject(); } private function init3DEngine():void{ view = new BasicView(0, 0, true, true); this.addChild(view); this.addEventListener(Event.ENTER_FRAME, _onEventRender3D); } private function init3DObject():void { //載入dae dae = new DAE(); dae.scale = 150; dae.addEventListener(FileLoadEvent.LOAD_COMPLETE, _onLoadComplete); dae.load("dae/cow.dae"); view.scene.addChild(dae); } private function _onLoadComplete(e:FileLoadEvent):void { //dae載入完成 trace("_onLoadComplete()") //將dae內所有材質的interactive屬性設為true setInteractive(dae, true); dae.useOwnContainer = true; //指定偵聽 addEventListeners(dae, InteractiveScene3DEvent.OBJECT_PRESS, _onPress ); addEventListeners(dae, InteractiveScene3DEvent.OBJECT_OVER, _onOver ); addEventListeners(dae, InteractiveScene3DEvent.OBJECT_OUT, _onOut ); } private function _onPress(e:InteractiveScene3DEvent):void { _bol = !_bol; var _cmd:SerialList = new SerialList(null, new DoAlphaOut(dae), function():void { //更換材質 var _matSrc:String = _bol ? "dae/cow_yallow.png" : "dae/cow.png"; var mat:BitmapFileMaterial = new BitmapFileMaterial(_matSrc); mat.interactive = true; dae.replaceMaterialByName(mat, "material0"); //material0為dae內的材質id名稱 }, new DoAlphaIn(dae) ); _cmd.execute(); } private function _onOver(e:InteractiveScene3DEvent):void { view.buttonMode = true; } private function _onOut(e:InteractiveScene3DEvent):void { view.buttonMode = false; } private function setInteractive(pTarget3D:DisplayObject3D, pBol:Boolean):void { for each (var mat:MaterialObject3D in pTarget3D.materials.materialsByName) { mat.interactive = true; } } private function addEventListeners(pTarget3D:DisplayObject3D, pEventType:String, pListener:Function):void { pTarget3D.addEventListener(pEventType, pListener); for each (var child:DisplayObject3D in pTarget3D.children) { addEventListeners(child, pEventType, pListener); } } private function _onEventRender3D(e:Event):void{ dae.rotationY += 2; view.camera.x += (Math.sin(mouseX / stage.stageWidth * 3 * Math.PI) * 1000 - view.camera.x) * .1; view.camera.z += (Math.cos(mouseX / stage.stageWidth * 3 * Math.PI) * 1000 - view.camera.z) * .1; view.camera.y += (mouseY / stage.stageHeight * 2000 - 500 - view.camera.y) * .05; view.singleRender(); } }}
var _ldr:Loader = new Loader();var _player:Object = new Object();Security.allowDomain("www.youtube.com");_ldr.contentLoaderInfo.addEventListener(Event.INIT, _onInit);_ldr.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"));private function _onInit(e:Event):void { ytLoader.addChild(_ldr); _ldr.content.addEventListener("onReady", _onReady); _ldr.content.addEventListener("onStateChange", _onStateChange);}private function _onReady(e:Event):void { _player = _ldr.content; _player.setSize(450, 269); _player.cueVideoById("VIDEO_ID", 0, "hd720"); _player.playVideo();}private function _onStateChange(e:Event):void { if (_player.getPlayerState == 0) { _player.destroy(); }}//官方說明文件http://code.google.com/intl/zh-TW/apis/youtube/flash_api_reference.html
var _bmpdata:BitmapData = new BitmapData(165, 244, true, 0x000000);_bmpdata.draw(photo_mc);var _bmp:Bitmap = new Bitmap(_bmpdata);_bmp.smoothing = true;
f4v是fp10以上支援的高畫質影音格式(要用CS4 Encoder轉檔),
畫質更好檔案更小,
如果要發佈到網路上使用,
要把副檔名"f4v"改成"flv",不然會發現找不到檔案的問題。
package{ import flash.display.*; import flash.events.*; import flash.utils.Timer; import idv.phantom.actors.ActorMovieClip; public class CountDown extends ActorMovieClip { private var _end:Date = new Date(2010, 3, 1, 0, 0); //月減要減1 private var _now:Date = new Date(); private var _timer:Timer; function CountDown () { }; override protected function init():void { _timer = new Timer(1000); _timer.addEventListener(TimerEvent.TIMER, _onTimer); _timer.start(); } private function _onTimer(e:TimerEvent):void { var _overtime:Number; _now.seconds = _now.seconds + 1; _overtime = _end.getTime() - _now.getTime(); var _day:Number = Math.floor(_overtime / 24 / 60 / 60 / 1000); var _hr :Number = Math.floor(_overtime / 60 / 60 / 1000) % 24; var _min:Number = Math.floor(_overtime / 60 / 1000) % 60; day.text = String(_day < 10 ? "0" + _day : _day); hr.text = String(_hr < 10 ? "0" + _hr : _hr); min.text = String(_min < 10 ? "0" + _min : _min); } }//end of class}
_mc.x = (i % _maxWidth) * _mc.width;_mc.y = Math.flooer(i % _maxWidth) * _mc.height;
CustomEvent:
package{ import flash.events.Event; [Event(name = "CUSTOM_EVENT" , type = "")] public class CustomEvent extends Event { public static const CUSTOM_EVENT:String = "customEvent"; private var _data:*; public function CustomEvent(type:String) { super(type); } //////////////////////////////開放存取data屬性,設為*可丟入任意物件 public function set data(pData:*) { _data = pData; } public function get data():*{ return _data; } } }
Google Calander
隨時記錄、掌握專案製作上線時間,如果沒有它我的schedul一定是大混亂......
整個設計很有日本風的tone!
這次的專案只小小的支援了一個互動單元...
質感...好有質感啊!!
9/6下午五點多在
華中橋
_mc.width = 1024; _mc.scaleY = _mc.sacleX;