|
第五話
TQC認證 第四類 綜合應用II 檔案下載 |
EX6.星際大戰 |
|
|
|
EX7.貪吃蛇 |
|
- 開啟檔案FLD0507.FLA。
- 於AS圖層第一個影格,加上動作。
stop();
function init(){
score=0; //初始分數
dir=0; //貪食蛇開始不動
bodyLong=0; //貪食蛇身體長度
snakePos=[]; //記錄貪食蛇經過的路
snakeMC._visible=true;
//貪食蛇初始位置
snakeMC._x=197;
snakeMC._y=293;
//遊戲區域範圍
xMin = bgMC._x;
yMin = bgMC._y;
xMax = bgMC._x + bgMC._width;
yMax = bgMC._y + bgMC._height;
newFood();
}
//隨機在遊戲區域內產生食物
function newFood(){
attachMovie("foodMC","foodMC",100);
foodMC._x=int(random(bgMC._width-foodMC._width))+xMin+foodMC._width/2;
foodMC._y=int(random(bgMC._height-foodMC._height))+yMin+foodMC._height/2;
}
//偵測按鍵來決定貪食蛇方向
function ctrlDir(){
if(Key.isDown(Key.LEFT)){
dir="left";
}else if(Key.isDown(Key.RIGHT)){
dir="right";
}else if(Key.isDown(Key.UP)){
dir="up";
}else if(Key.isDown(Key.DOWN)){
dir="down";
}
}
//貪食蛇移動的設定
function snakeMove(){
//在遊戲範圍之內移動
if(snakeMC._x > xMin && snakeMC._x < xMax
&& snakeMC._y > yMin && snakeMC._y
< yMax){
//依鍵盤方向,每次前進15px
if(dir=="left"){
snakeMC._x-=15;
}else if(dir=="right"){
snakeMC._x+=15;
}else if(dir=="up"){
snakeMC._y-=15;
}else if(dir=="down"){
snakeMC._y+=15;
}
//把新的位置放進陣列中
snakePos.unshift({x:snakeMC._x,y:snakeMC._y});
}else{
//貪食蛇超出遊戲範圍
gotoAndStop(2);
removeSnake();
}
//將貪食蛇身體從第一個到最後一個重新定位
for(i=0;i<=bodyLong;i++){
_root["snakeMC"+i]._x=snakePos[i].x;
_root["snakeMC"+i]._y=snakePos[i].y;
}
detCollision();
ctrlDir();
eatFood();
}
//吃到食物後,分數加一分,身體變長一格,並重新產生食物
function eatFood(){
if(snakeMC.hitTest(foodMC)){
_root.score+=1;
newFood();
growUp();
}
}
//身體變長
function growUp(){
bodyLong++;
attachMovie("snakeMC","snakeMC"+bodyLong,bodyLong);
}
//貪食蛇吃到自己
function detCollision(){
for(i=0;i<=bodyLong;i++){
if(snakeMC.hitTest(_root["snakeMC"+i])){
gotoAndStop(2);
snakeMC._visible=false;
removeSnake();
}
}
}
//移除身體
function removeSnake(){
for(j=0;j<=bodyLong;j++){
_root["snakeMC"+j].removeMovieClip();
}
}
init();
- 於第2各影格,"GAME OVER"影片片段元件上加上動作。
onClipEvent(keyDown){
if(Key.isDown(Key.SPACE)){//按下空白鍵重新開始
_root.gotoAndStop(1);
}
}
|
|
EX8.情緒發洩器 |
|
- 開啟檔案FLD0508.FLA。
- 於動作圖層第一個影格加上動作stop();。
- 於動作圖層第二個影格加上動作。
score=0;
startDrag(hammer,true);
time.gotoAndPlay(1);
- 於元件庫中的"計時器"影片片段元件,雙擊進入編輯環境,第一個影格動作為time=30;。
- 第二個影格動作為。
if(time==0){
stop();
_root.gotoAndStop(9);
}
- 第13個影格動作為。
time--;
gotoAndPlay(2);
- 於元件庫中的"人動移動"影片片段元件,雙擊進入編輯環境,第6個影格中的"感應區"淡藍色隱形按鈕元件,加上動作。
on(press,rollOver){
_root.hammer.gotoAndPlay(2);
gotoAndPlay(14);
_root.score++;
}
- 回到場景中,動作圖層的第9各影格加入動作。
stop();
stopDrag();
stopAllSounds();
- 並於"遊戲開始"按鈕加上動作。
on (press) {
gotoAndPlay(2);
}
|
|
EX9.漂浮的字母球 |
|
- 開啟檔案FLD0509.FLA。
- 於場景中第一影格加上影格動作。
//------------------------------------
var BallNum:Number = 5; // 字母球數目
var default_alpha:Number = 50; // 字母球預設透明度
//--------------------------------------
// 判斷與紀錄字母球閒置狀態相關的變數
var Idle:Boolean = true; //閒置狀態
var Last_Ball:Number = 0; //己經在zoom-in狀態的球
var Current_Ball:Number; //下一個要zoom-in的球
var Last_Time:Number = getTimer(); //上一次切換的時間
var Current_Time:Number; //目前的時間
//----------------------------------------
// 計算字母球位置所需的變數
var OffsetX:Number = 160;
var OffsetY:Number = 100;
var perspective:Number = 500;
var TY:Number = 360;
var Xangle:Number = 0;
var Yangle:Number = 0;
var Xang:Number;
var Yang:Number;
var NewPos:Number = 300;
var x = new Array();
var y = new Array();
var z = new Array();
var xpos = new Array();
var ypos = new Array();
var zpos = new Array();
var Depth = new Array();
var Pos_List = [200, 300, 330, 390, 440];
//-----------------------------------------
var count:Number;
//-----------------------------------------
// 初始化字母球的狀態(位置與透明度)
for ( count = 1; count <= BallNum ; count++ ) {
z[count] = Math.cos(count * 45 * 0.018) * 50;
y[count] = Math.sin(count * 45 * 0.018) * 50;
x[count] = count * 40 - BallNum / 2 * 40;
eval("b"+count)._alpha = default_alpha;
}
//-----------------------------------------
// 設定 ball 位置
function setBallPos(Ball,x,y)
{
eval("b" + Ball)._x = x;
eval("b" + Ball)._y = y;
}
//控制BALL放大
function BallIn0 (Ball)
{
eval("b"+Ball).gotoAndPlay("in");
eval("b"+Ball)._alpha=100;
}
function BallIn (Ball)
{
if(Last_Ball){
BallOut(Last_Ball);
Last_Ball=0;
}
Idle=false;
NewPos=Pos_List[Ball-1];
BallIn0(Ball);
}
function BallOut0 (Ball)
{
eval("b"+Ball).gotoAndPlay("out");
eval("b"+Ball)._alpha=default_alpha;
}
function BallOut (Ball)
{
Idle=true;
BallOut0(Ball);
}
- 於場景中第二影格加上影格動作。
// 計算字母球新位置
for ( count = 1; count <= BallNum ; count++ ) {
Xang = Xangle * 0.018;
Yang = Yangle * 0.018;
zpos[count] = z[count] * Math.cos(Yang) - x[count] * Math.sin(Yang);
xpos[count] = z[count] * Math.sin(Yang) + x[count] * Math.cos(Yang);
ypos[count] = y[count] * Math.cos(Xang) - zpos[count]
* Math.sin(Xang);
zpos[count] = y[count] * Math.sin(Xang) + zpos[count]
* Math.cos(Xang);
Depth[count] = 1 / (zpos[count] / perspective + 1);
// 設定字母球位置
setBallPos(count,xpos[count] * Depth[count] + OffsetX,
ypos[count] * Depth[count] + OffsetY);
}
// 計算字母球相對位移值
TY = TY + (NewPos - TY) / 5;
Xangle = TY;
// 閒置狀態處理程式
if(Idle){
Current_Time=getTimer();
//若閒置超過2秒
if(Current_Time-Last_Time>2000){
Current_Ball=random(BallNum)+1;//隨機選取
if(Last_Ball != Current_Ball){//判斷是否為同一顆球
if(Last_Ball)BallOut0(Last_Ball);
Last_Ball=Current_Ball;//紀錄那一顆有變化
NewPos=Pos_List[Last_Ball-1];//設定位移值
Last_Time=Current_Time;//紀錄現在時間
BallIn0(Ball);
}
}
}
|
|
EX5.整數計算機 |
|
- 於as圖層中第1各影格動作如下:
stop();
//-------------------------------------
function NumKeyPress(nn) {
if(ClearFlag){
ClearFlag=false;
out.text="0";
}
if(out.length<8){
out.text=String(Number(out.text)*10+Number(nn));
}
}
//-------------------------------------
function OpPress(op){
if(!ClearFlag){
DoCalc(LastOp,LastOpd,Number(out.text));
LastOpd=Result;
}
LastOp=op;
out.text=String(LastOpd);
ClearFlag=true;
}
//-------------------------------------
function DoCalc(op,opd1,opd2) {
switch(op){
case 1:
Result=opd1 + opd2;
break;
case 2:
Result=opd1 - opd2;
break;
case 3:
Result=opd1 * opd2;
break;
case 4:
Result=int(opd1 / opd2);
break;
default:
Result=opd2;
break;
}
}
- 場景中"CE"按鈕動中:
on(release){
out.text="0";
}
- 場景中"OFF"按鈕動中:
on(release){
fscommand("quit");
}
- 其餘按鈕皆加上鍵盤動作,例:
場景中"0"按鈕動中:
on (release, keyPress "0")
{
NumKeyPress('0');
}
|
|
|