<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
creationComplete="application1_creationCompleteHandler(event)" >
<fx:Script>
<![CDATA[
import caurina.transitions.Tweener;
import mx.events.FlexEvent;
private var initX:int=500;
private var initY:int=200;
private var gap:int=30;
private var _scale:Number=.6;
private var _current:int;
private var time:Number=0.5;
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
setCurrent(3,false);
}
private function currentInd(offset:int,len:uint):int
{
var temp:int=_current+offset;
if(temp>=len)
return temp%len;
else if(temp<0)
return len+temp;
else return temp;
}
private function setCurrent(ind:int,move:Boolean=true):void
{
var len:uint=menu_group.numElements;
_current=ind;
if(_current>=len)_current=0;
else if(_current<0)_current=len-1;
var _canvas:Canvas;
for(var i:int=-2;i<=2;i++)
{
var v:int=(Math.abs(i)==2)?0:1;
var t:Number=(Math.abs(i)==2)?.1:time;
var c:Number=Math.pow(_scale,Math.abs(i));
var x:Number;
var y:Number;
_canvas=menu_group.getChildAt(currentInd(i,len)) as Canvas;
y=(i==0)?initY:initY+(_canvas.height/2)-(_canvas.height*_scale/(2*Math.abs(i)));
switch(i)
{
case 0:x=initX;break;
case 1:x=initX+_canvas.width+gap;break;
case 2:x=initX+_canvas.width+gap*1.5;break;
case -1:x=initX-(_canvas.width*_scale)-gap;break;
case -2:x=initX-(_canvas.width*_scale)-gap*.5;break;
}
if(move)
Tweener.addTween(_canvas, {visible:v,scaleX:c,scaleY:c,x:x,y:y,time:t});
else
{
_canvas.x=x;
_canvas.y=y;
_canvas.scaleX=_canvas.scaleY=c;
_canvas.visible=Boolean(v);
}
}
}
protected function button1_clickHandler(event:MouseEvent):void
{
setCurrent(_current+1);
}
protected function button2_clickHandler(event:MouseEvent):void
{
setCurrent(_current-1);
}
protected function type_1_clickHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
}
]]>
</fx:Script>
<s:Group id="menu_group">
<mx:Canvas visible="false" backgroundColor="0xff0000" width="100" height="100" click="type_1_clickHandler(event)"/>
<mx:Canvas visible="false" backgroundColor="0x00ff00" width="100" height="100" click="type_1_clickHandler(event)"/>
<mx:Canvas visible="false" backgroundColor="0x0000ff" width="100" height="100" click="type_1_clickHandler(event)"/>
<mx:Canvas visible="false" backgroundColor="0xffff00" width="100" height="100" click="type_1_clickHandler(event)"/>
<mx:Canvas visible="false" backgroundColor="0x00ffff" width="100" height="100" click="type_1_clickHandler(event)"/>
<mx:Canvas visible="false" backgroundColor="0xff00ff" width="100" height="100" click="type_1_clickHandler(event)"/>
<mx:Canvas visible="false" backgroundColor="0x123456" width="100" height="100" click="type_1_clickHandler(event)"/>
<mx:Canvas visible="false" backgroundColor="0x654321" width="100" height="100" click="type_1_clickHandler(event)"/>
</s:Group>
<mx:HBox>
<s:Button click="button2_clickHandler(event)"/>
<s:Button click="button1_clickHandler(event)"/>
</mx:HBox>
</s:Application>
2011年9月20日 星期二
as3 [flex]旋轉選單
2011年9月17日 星期六
as3 FLIXEL FlxSprite 自訂mouse event事件
雖然說flixel中有button類型,也可以自行更換裡面的圖,但就是少了那麼一點點的自由度
而常常只是需要知道某個sprite是否被滑鼠點擊,就套上button…可能太麻煩了,而且還不一定能達到想要的效果。
基於這個原因,我自已刻了一個類別~
只要將sprite繼承該類別,再直接override裡面的 over、out、onPressed、onReleased,就可以簡單的使用mouse event了
而常常只是需要知道某個sprite是否被滑鼠點擊,就套上button…可能太麻煩了,而且還不一定能達到想要的效果。
基於這個原因,我自已刻了一個類別~
只要將sprite繼承該類別,再直接override裡面的 over、out、onPressed、onReleased,就可以簡單的使用mouse event了
2011年9月9日 星期五
php utf8 2 unicode,unicode 2 utf8
<?
// utf8 - unicode
function utf8_unicode($c) {
switch(strlen($c)) {
case 1:
return ord($c);
case 2:
$n = (ord($c[0]) & 0x3f) << 6;
$n += ord($c[1]) & 0x3f;
return $n;
case 3:
$n = (ord($c[0]) & 0x1f) << 12;
$n += (ord($c[1]) & 0x3f) << 6;
$n += ord($c[2]) & 0x3f;
return $n;
case 4:
$n = (ord($c[0]) & 0x0f) << 18;
$n += (ord($c[1]) & 0x3f) << 12;
$n += (ord($c[2]) & 0x3f) << 6;
$n += ord($c[3]) & 0x3f;
return $n;
}
}
function u2utf8($c) {
$str="";
if ($c < 0x80) $str.=$c;
else if ($c < 0x800) {
$str.=chr(0xC0 | $c>>6);
$str.=chr(0x80 | $c & 0x3F);
} else if ($c < 0x10000) {
$str.=chr(0xE0 | $c>>12);
$str.=chr(0x80 | $c>>6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
} else if ($c < 0x200000) {
$str.=chr(0xF0 | $c>>18);
$str.=chr(0x80 | $c>>12 & 0x3F);
$str.=chr(0x80 | $c>>6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
}
return $str;
}
echo u2utf8('20197');
echo utf8_unicode('電');
?>
as3[演算法] 模擬退火 Simulated Annealing
模擬退火 Simulated Annealing
為npc問題
p係指 多項式時間可決定
np則是 非決定性多項式時間
意思就是沒辦法用固定的時間(step)來得到一個問題的答案
而npc是指在np問題中 最困難的情況!
通常這類問題 需要將 參數一個一個帶進去try結果,尋找最佳結果
此模擬退火方法 在真實世界中係指一物體,受高溫後 溫度上升為t ,其內部原子 得到熱能後 形成可遊離狀態
在此可想像成沈積現象 原子會依自身的質能 往理想(比較重的會比較輕的掉到較底的位置)的位置移動 等到溫度降低之後 所有的原子失去動能
此時的各個原子所在的位置 理當比原先較為穩定(就像進行了一次排序) 這就是退火
as3 FLIXEL 真實碰撞 prefect collide
範例是使用鍵盤控制 用上下左右...
step1:使用overlap偵測碰撞
FlxG.overlap(targetImg,this,onOverlap);
step2:使用perfectCollision function偵測是否為真實碰撞
private function onOverlap(targetimg:FlxSprite,overlapimg:FlxSprite):void
{
if(perfectCollision(targetimg,overlapimg))
output_txt.text="true";
else
output_txt.text="false";
}
protected function perfectCollision(s1:FlxSprite,s2:FlxSprite):Boolean {
var alphaThreshold:uint = 0xFF;
var p1:FlxPoint=getScreenXY(s1);
var p2:FlxPoint=getScreenXY(s2);
return s1.framePixels.hitTest(new Point(p1.x,p1.y),alphaThreshold, s2.framePixels,new Point(p2.x,p2.y));
}
protected function getScreenXY(target:FlxSprite):FlxPoint
{
return target.getScreenXY(new FlxPoint());
}
完成~
step1:使用overlap偵測碰撞
FlxG.overlap(targetImg,this,onOverlap);
step2:使用perfectCollision function偵測是否為真實碰撞
private function onOverlap(targetimg:FlxSprite,overlapimg:FlxSprite):void
{
if(perfectCollision(targetimg,overlapimg))
output_txt.text="true";
else
output_txt.text="false";
}
protected function perfectCollision(s1:FlxSprite,s2:FlxSprite):Boolean {
var alphaThreshold:uint = 0xFF;
var p1:FlxPoint=getScreenXY(s1);
var p2:FlxPoint=getScreenXY(s2);
return s1.framePixels.hitTest(new Point(p1.x,p1.y),alphaThreshold, s2.framePixels,new Point(p2.x,p2.y));
}
protected function getScreenXY(target:FlxSprite):FlxPoint
{
return target.getScreenXY(new FlxPoint());
}
完成~
訂閱:
文章 (Atom)