Flash教程:模拟幸运号抽奖机

平面设计 2021-07-03 14:34www.168986.cn平面设计培训
各位看官记得要回帖哦!教学中经常要用到抽号,名称随便取的,也叫“幸运号”吧。做了一个,不是很成熟,有那么点效果而已,仅供新手参考(程序中运用了一些常用的基础语法),抛砖引玉而已。



第一帧上代码:
/* sxl001 http://sxl001.07dns. qq: 285510591 */
//============= 初始区 ================================
s();
//----- 全屏与隐菜单区
fsmand("fullscreen", true);
fsmand("showmenu", false);
//----- 变量区
/* total_num 记录输入总数 | txtLong_num 输入字符长度 | num_array 记录输入的所有数
如输入 119 时:
total_num=119 | txtLong_num=3 | num_array=[001,002,003,....]
*/
var total_num:Number = 0;
var txtLong_num:Number = 0;
var num_array:Array = [];
//=======================================================
//============= 按钮与声音区 ============================
var startMp3:Sound = new Sound();
startMp3.attachSound("start");
startMp3.start();
var loopMp3:Sound = new Sound();
loopMp3.attachSound("loop");
startMp3.onSoundComplete = function() {
startMp3.start();
};
start_mc.onRollOver = function() {
_sound();
this.play();
};
start_mc.onPress = function() {
Submit();
};
start_mc.onRollOut = function() {
this.play();
};
quit_btn.onRollOver = function() {
_sound();
};
quit_btn.onPress = function() {
fsmand("quit", true);
};
//----- 文本区
Selection.setFocus(input_txt);
input_txt.maxChars = 4; // 控制4位(最多9999人)足够用了
input_txt.restrict = "0-9";
input_txt.border = true;
input_txt.borderColor = 0xFF00FF;
//==========================================================
//============= 函数区 =====================================
//----- 提交
function Submit() {
if (input_txt.text != "" && input_txt.text.substr(0, 1) != "0") {
total_num = Number(input_txt.text);
txtLong_num = input_txt.text.length;
Distribution(input_txt.text);
startMp3.s();
play();
}
Key.removeListener(keyListener);
}
//-------- num_array存贮从0到最大数值
function Distribution(str:String) {
var long:Number = str.length;
var maxNum:Number = Number(str);
for (var i:Number = 1; i<=maxNum; i ) {
var l:Number = String(i).length;
var zha:Number = long-l;
switch (zha) {
case 0 :
num_array.push(i);
break;
case 1 :
num_array.push("0" i);
break;
case 2 :
num_array.push("00" i);
break;
case 3 :
num_array.push("000" i);
break;
}
}
}
//----- 数组乱序
function randomArray(Target_array:Array) {
Target_array.sort(function () {
return Math.round(Math.random()) ? 1 : -1;
});
}
//----- 按钮声音
function _sound() {
var btnS:Sound = new Sound();
btnS.attachSound("btnSound");
btnS.start();
}
//----- 回车键提交
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
if (Key.getCode() == "13") {
if (input_txt.text != "" && input_txt.text.substr(0, 1) != "0") {
total_num = Number(input_txt.text);
txtLong_num = input_txt.text.length;
Distribution(input_txt.text);
startMp3.s();
_root.play();
Key.removeListener(keyListener);
}
}
};
Key.addListener(keyListener);
//================================================ 第二帧上代码:
s();
//============= 初始区 ===========================
//------ 加点投影效果
import flash.filters.DropShadowFilter;
var d_filtersropShadowFilter = new DropShadowFilter(5, 45, 0x336633, 80, 8, 8);
//------ 数组乱序
randomArray(num_array);
//------ loop声音
loopMp3.start();
loopMp3.onSoundComplete = function() {
loopMp3.start();
};
/*
如输入 119 时:
total_num=119 | txtLong_num=3 | num_array=[001,....]
randomNum 停止工作时显示未位上的数字相同的一组文本框(0~3) | C_array 用于删除已抽的号码函数 |
getNo_array 存贮获取的当前一组文本中的数字 | jieguo_mcY0 弹出的显示已抽号的窗口的初始y坐标
*/
var randomNum:Number, C_array:Array = [], getNo_array:Array = [], jieguo_mcY0:Number = jieguo_mc._y;
var kO:Boolean = true;
total_txt.text = "参与选号总数是: " total_num;
//=====================================================
//============= 函数区 ===============================
//------ 根据第一帧上输入的数值复制文本框个数与各位数上的数量
this.createEmptyMovieClip("main", 0);
body();
function body() {
for (var i:Number = 0; i<txtLong_num; i ) {
for (var j:Number = 0; j<4; j ) {
main["m" i j] = main.attachMovie("cell", "m" i j, main.getNextHighestDepth(), {_x:i*80, _y:-j*85});
main["m" i j].v = true;
main["m" i j].filters = [d_filters];
//main["m" i j].num 决定再次升到顶端时其中的数值从数组num_array中进行取值的位置
main["m" i j].num = j;
main["m" i j].t.text = num_array[j].toString().substr(i, 1);
Rolling(main["m" i j]);
}
}
}
//------- 文本框居中排列
PosiMain();
function PosiMain() {
main._x = Stage.width/2-main._width/2;
main._y = Stage.height/2-40;
}
//------- 滚动函数
function Rolling(target:MovieClip) {
target.onEnterFrame = function() {
if (this.v) {
this._y = 40;
if (this._y>=80) {
this.num = 4;
if (this.num>total_num) {
this.num = Number(this._name.substr(2, 1));
}
this.t.text = num_array[Number(this.num)].toString().substr(this._name.substr(1, 1), 1);
this._y = -255;
}
} else {
deleCell();
}
};
}
main.setMask(mask_mc);
//------- 停止滚动和显示结果区
function deleCell() {
for (var i in main) {
// 如果文本框未位上的数字与停止按钮给出的数字不同时就被删除
if (main._name.substr(2, 1) != randomNum) {
main.t.text = "";
main._visible = false;
main.removeMovieClip();
delete main.onEnterFrame;
} else {
// 如果文本框未位上的数字与停止按钮给出的数字相同时就作为显示对象
if (main._y != 0) {
main._y = (0-main._y)/10;
} else {
//--- 删除num_array中已抽的号码
C_array.push(main);
if (C_array.length == txtLong_num) {
var n = main.num;
getNo_array.push(num_array[n]);
jieguo_mc.t.text = "";
for (var Index:Number = (getNo_array.length-1); Index>=0; Index--) {
jieguo_mc.t.text = "第" (Index 1) "次抽取的号码是: " getNo_array[Index] "\n";
}
var tw1 = new mx.transitions.Tween(jieguo_mc, ’_y’, mx.transitions.easing.Back.easeOut, jieguo_mcY0, Stage.height-jieguo_mc._height, 1, true);
num_array.splice(n, 1);
delete main.onEnterFrame;
}
}
}
}
}
//===================================================
//============= 按钮与声音区 ========================
s_mc.t.text = "停止";
reSet_mc.t.text = "再选";
// 控制按钮切换变量
s_mc.onOff = true;
reSet_mc.onOff = false;
s_mc.onRollOver = function() {
_sound();
this.play();
};
s_mc.onPress = function() {
if (this.onOff) {
// randomNum决定哪组文本框被保留或被删除
randomNum = random(4);
loopMp3.s();
C_array = [];
for (var i in main) {
//main.v决定执行停止滚动和显示结果区
main.v = false;
}
reSet_mc.onOff = true;
this.onOff = false;
kO = false;
}
};
s_mc.onRollOut = function() {
this.play();
};
reSet_mc.onRollOver = function() {
_sound();
this.play();
};
reSet_mc.onPress = function() {
if (this.onOff) {
loopMp3.start();
for (var i in main) {
delete main.onEnterFrame;
main.removeMovieClip();
}
body();
s_mc.onOff = true;
this.onOff = false;
kO = true;
}
};
reSet_mc.onRollOut = function() {
this.play();
};
jieguo_mc.Press_mc.onRollOver = function() {
_sound();
};
jieguo_mc.Press_mc.onPress = function() {
var tw2 = new mx.transitions.Tween(jieguo_mc, ’_y’, mx.transitions.easing.Back.easeOut, jieguo_mc._y, jieguo_mcY0, 1, true);
};
//----- 回车键控制
var keyObj:Object = new Object();
keyObj.onKeyDown = function() {
if (Key.getCode() == Key.ENTER) {
switch (kO) {
case true :
// randomNum决定哪组文本框被保留或被删除
randomNum = random(4);
loopMp3.s();
C_array = [];
for (var i in main) {
//main.v决定执行停止滚动和显示结果区
main.v = false;
}
reSet_mc.onOff = true;
s_mc.onOff = false;
kO = false;
break;
case false :
loopMp3.start();
for (var i in main) {
delete main.onEnterFrame;
main.removeMovieClip();
}
body();
s_mc.onOff = true;
reSet_mc.onOff = false;
kO = true;
break;
}
}
};
Key.addListener(keyObj);
//===========================================

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by