AS3.0抽獎盤,控制角度和圈數
阿新 • • 發佈:2019-02-16
自己加以理解也註釋了一部分。
package { import flash.display.MovieClip; import flash.events.*; import flash.display.Shape; import fl.controls.ComboBox; public class Main extends MovieClip { private var arrow:Arrow=new Arrow(); private var speed:Number=20;//速度 private var istart:Boolean = false;//是否開始 private var rounds:int;//圈數 private var totalAngle :Number;//總的角度 private var currentAngle:Number;//當前角度 private var targetAngle:Number;//目標角度 private var totalTime:Number;//總的次數 private var perSpeed:Number;//每一次的遞減的加速度 private var circle_combox:ComboBox private var angle_combox:ComboBox public function Main() { init(); } private function init():void { //輪盤 var disk:Disk=new Disk(10,150); //addChild(disk); disk.x = stage.stageWidth / 2; disk.y = stage.stageHeight / 2; addChild(arrow); arrow.x = disk.x; arrow.y = disk.y; //建立按鈕 var start_btn:CButton=new CButton("開始抽獎"); start_btn.x=660; start_btn.y=30; var stop_btn:CButton=new CButton("停止轉動"); stop_btn.x=660; stop_btn.y=60; addChild(start_btn); addChild(stop_btn); start_btn.addEventListener(MouseEvent.CLICK,onClick); stop_btn.addEventListener(MouseEvent.CLICK,onStopClick); //初始化原始角度和圈數
rounds = 1; targetAngle = 0; circle_combox = new ComboBox(); angle_combox = new ComboBox(); //設定選擇圈數 //new Label(this,420,70,"Circle:"); //var items:Array=["1","2","3","4","5","6","7","8","9"]; //circle_combox=new ComboBox(this,450,70,items[1],items); circle_combox.addItem({label:"1",data:1}); circle_combox.addItem({label:"2",data:2}); circle_combox.addItem({label:"3",data:3}); circle_combox.addItem({label:"4",data:4}); circle_combox.addItem({label:"5",data:5}); circle_combox.addItem({label:"6",data:6}); circle_combox.addItem({label:"7",data:7}); circle_combox.addItem({label:"8",data:8}); circle_combox.addItem({label:"9",data:9}); circle_combox.addEventListener(Event.CHANGE,onComboxChange); //new Label(this,420,90,"Angle:"); //var angles:Array=["0","36","72","108","144","180","216","252","288","324"]; //angle_combox=new ComboBox(this,450,90,angles[1],angles); //旋轉角度可以自己定義 angle_combox.addItem({label:"0",data:0}); angle_combox.addItem({label:"36",data:36}); angle_combox.addItem({label:"72",data:72}); angle_combox.addItem({label:"108",data:108}); angle_combox.addItem({label:"144",data:144}); angle_combox.addItem({label:"180",data:180}); angle_combox.addItem({label:"216",data:216}); angle_combox.addItem({label:"252",data:252}); angle_combox.addItem({label:"288",data:288}); angle_combox.addItem({label:"324",data:324}); angle_combox.addEventListener(Event.CHANGE,onComboxChangeAngle); setParameters(); circle_combox.x = 60; circle_combox.y = 30; angle_combox.x = 60; angle_combox.y = 60; addChild(circle_combox); addChild(angle_combox); } //設定初始化引數 private function setParameters():void { currentAngle=arrow.rotation;//當前角度 speed=10;
totalAngle=(360*rounds)+(targetAngle-currentAngle);//算出總的角度 trace("開始總角度"+totalAngle); //計算項數Sn=(a1+an)*n/2 //等差數列,算出n列次數 //算出項數 totalTime =((2 * totalAngle) / speed); //d=(an-a1)÷(n-1) //算出公差 perSpeed = (speed / (totalTime -1 )); } private function onClick(event:MouseEvent):void { startGame(); } private function onStopClick(event:MouseEvent):void { if (! istart) { return; } stopMove(); } private function onComboxChange(event:Event):void { rounds=int(circle_combox.selectedItem.data); } private function onComboxChangeAngle(event:Event):void { targetAngle=int(angle_combox.selectedItem.data); } private function startGame():void { if ( istart) return; istart = true; setParameters() addEventListener(Event.ENTER_FRAME,Run); } private function Run(event:Event):void { if (istart) { move(); } else { stopMove(); } } //運動 private function move():void { arrow.rotation += speed;//加上一個初始速度然後進行遞減 speed-=perSpeed; if(speed<=0)stopMove(); } //停止執行 private function stopMove():void { istart=false; removeEventListener(Event.ENTER_FRAME,Run); } } }
package
{
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.filters.GlowFilter;
//測試按鈕
public class CButton extends Sprite
{
public function CButton(label:String)
{
var btn_label:TextField=new TextField();
btn_label.text=label;
btn_label.selectable=false;
btn_label.autoSize=TextFieldAutoSize.CENTER;
btn_label.mouseEnabled=false;
btn_label.x=10;
addChild(btn_label);
this.graphics.beginFill(0xffffff);
this.graphics.drawRect(0,0,80,20);
this.graphics.endFill();
this.filters=[new GlowFilter(0x333333,0.3,3,3)];
this.buttonMode=true;
}
}
}
package
{
//圓盤
import flash.display.Sprite;
public class Disk extends Sprite
{
public function Disk(num:int,radius:Number)
{
if(num==0) return;
this.graphics.lineStyle(0);
this.graphics.drawCircle(0,0,radius);
var perAngle:Number=360/num;
for (var i:int=0; i<num; i++)
{
this.graphics.moveTo(0,0);
this.graphics.lineTo(Math.cos(i*perAngle*Math.PI/180)*radius,Math.sin(i*perAngle*Math.PI/180)*radius);
}
}
}
}
package
{
import flash.display.Sprite
public class Arrow extends Sprite
{
public function Arrow()
{
this.graphics.lineStyle(10,0x00ff00);
this.graphics.drawCircle(0,0,10);
this.graphics.moveTo(0,0);
this.graphics.lineTo(0,-160);
this.graphics.moveTo(0,-160);
this.graphics.lineTo(Math.cos(Math.PI/3)*8,-160+Math.sin(Math.PI/3)*8);
this.graphics.moveTo(0,-160);
this.graphics.lineTo(Math.cos(Math.PI-Math.PI/3)*8,-160+Math.sin(Math.PI-Math.PI/3)*8);
}
}
}