看了《AS3.0游戏编程大学》用里面的素材模仿做了第一个flash游戏。。。
game
游戏影片剪辑代码,按照AS3.0 JIT编译的说明,把游戏代码放在构造函数里面貌似不是好的做法,效率低,因为JIT编译对构造函数里面的代码不进行动态编译。
MyGame.as
1 package 2 { 3 import flash.display.MovieClip; 4 import flash.events.MouseEvent; 5 import flash.utils.Timer; 6 import flash.events.TimerEvent; 7 import flash.text.TextField; 8 import flash.events.Event; 9 import flash.utils.getTimer; 10 import flash.display.IBitmapDrawable; 11 import flash.media.SoundChannel; 12 import flash.net.SharedObject; 13 14 15 public class MyGame extends MovieClip 16 { 17 18 private const boardWidth:uint = 6; 19 private const boardHeight:uint = 6; 20 private const cardWidth:Number = 52; 21 private const cardWHeight:Number = 52; 22 private const offsetX:Number = 120; 23 private const offsetY:Number = 45; 24 private const pointForMatch:int = 100; 25 private const pointForMiss:int = -5; 26 27 28 private var cardArr:Array; 29 private var firstCard:Card10; 30 private var secondCard:Card10; 31 private var cardNumbers:uint = 0; 32 private var flipBackTimer:Timer; 33 34 private var startTime:uint; 35 private var gameTime:uint; 36 private var timeText:TextField; 37 private var score:int; 38 private var scoreText:TextField; 39 40 private var firstSound:FirstCardSound=new FirstCardSound(); 41 private var matchSound:MatchSound=new MatchSound(); 42 private var missSound:MissSound=new MissSound(); 43 44 45 46 public function MyGame():void 47 { 48 //var highScore:SharedObject = SharedObject.getLocal("userHighScore"); 49 //trace(highScore.data.HS); 50 //highScore.data.HS = 0; 51 //highScore.flush(); 52 //so.data.highScore = new Number(1234567890); 53 //so.flush(); 54 55 startTime = getTimer(); 56 gameTime = 0; 57 58 timeText=new TextField(); 59 timeText.x = 400; 60 addChild(timeText); 61 62 scoreText=new TextField(); 63 scoreText.x = 50; 64 score = 0; 65 addChild(scoreText); 66 67 68 addEventListener(Event.ENTER_FRAME,showTimeAndScore); 69 70 71 72 var Arr:Array=new Array(); 73 cardArr=new Array(); 74 for (var i:uint=0; i<boardWidth*boardHeight/2; i++) 75 { 76 Arr.push(i); 77 Arr.push(i); 78 } 79 80 for (i=0; i<boardHeight; i++) 81 { 82 for (var j:uint=0; j<boardWidth; j++) 83 { 84 var thiscard:Card10=new Card10(); 85 //thiscard.stop(); 86 cardArr.push(thiscard); 87 thiscard.x = i * cardWidth + offsetX; 88 thiscard.y = j * cardWHeight + offsetY; 89 var no:uint = Math.floor(Math.random() * Arr.length); 90 thiscard.cardFace = Arr[no]; 91 Arr.splice(no,1); 92 thiscard.gotoAndStop(thiscard.cardFace+2); 93 //thiscard.gotoAndStop(1); 94 thiscard.addEventListener(MouseEvent.CLICK,cardClik); 95 addChild(thiscard); 96 cardNumbers++; 97 } 98 } 99 100 flipBackTimer = new Timer(2000,1); 101 flipBackTimer.addEventListener(TimerEvent.TIMER_COMPLETE,allFlipBack); 102 flipBackTimer.start(); 103 104 } 105 106 private function showTimeAndScore(event:Event) 107 { 108 gameTime = getTimer() - startTime; 109 timeText.text = "time:" + clockTime(gameTime); 110 scoreText.text = "score:" + String(score); 111 112 } 113 114 private function clockTime(time:uint):String 115 { 116 var seconds:int = Math.floor(time / 1000); 117 var minutes:int = Math.floor(seconds / 60); 118 seconds -= minutes * 60; 119 var timeString:String = minutes + ":" + String(seconds + 100).substr(1,2); 120 return timeString; 121 } 122 123 private function allFlipBack(event:TimerEvent) 124 { 125 for (var i:uint=0; i<cardArr.length; i++) 126 { 127 //if(!this.getChildAt(i) is MovieClip) 128 //trace("yes"); 129 //(Card10)(this.getChildAt(i)).startFlip(1); 130 cardArr[i].startFlip(1); 131 132 } 133 134 //trace("t"); 135 flipBackTimer.removeEventListener(TimerEvent.TIMER_COMPLETE,allFlipBack); 136 137 } 138 139 private function cardClik(event:MouseEvent) 140 { 141 //var highScore:SharedObject = SharedObject.getLocal("userHighScore"); 142 //trace(so.data.highScore); 143 //var file:FileReference=new FileReference(); 144 //file.save(clockTime(gameTime),"t.txt"); 145 //MovieClip(root).gotoAndStop("GameOver"); 146 var thiscard:Card10=(event.currentTarget as Card10); 147 //trace(thiscard.cardFace); 148 if (firstCard == null) 149 { 150 firstCard = thiscard; 151 //thiscard.gotoAndStop(thiscard.cardFace+2); 152 thiscard.startFlip(thiscard.cardFace+2); 153 score += pointForMiss; 154 PlaySound(firstSound); 155 } 156 else if (firstCard==thiscard) 157 { 158 thiscard.startFlip(1); 159 firstCard = null; 160 PlaySound(firstSound); 161 162 163 } 164 else if (secondCard==null) 165 { 166 secondCard = thiscard; 167 //thiscard.gotoAndStop(thiscard.cardFace+2); 168 thiscard.startFlip(thiscard.cardFace+2); 169 if (firstCard.cardFace == secondCard.cardFace) 170 { 171 PlaySound(matchSound); 172 removeChild(firstCard); 173 removeChild(secondCard); 174 firstCard = null; 175 secondCard = null; 176 cardNumbers -= 2; 177 if (cardNumbers == 0) 178 { 179 //trace(cardNumbers); 180 181 MovieClip(root).Time = clockTime(gameTime); 182 MovieClip(root).Score = score; 183 184 var highScore:SharedObject = SharedObject.getLocal("userHighScore"); 185 186 if (score > highScore.data.HS) 187 { 188 highScore.data.HS=score; 189 highScore.flush(); 190 } 191 MovieClip(root).HighScore=highScore.data.HS; 192 MovieClip(root).gotoAndStop("GameOver"); 193 } 194 //trace(cardNumbers); 195 score += pointForMatch; 196 197 198 } 199 else 200 { 201 PlaySound(missSound); 202 //flipBackTimer=new Timer(2000,1); 203 flipBackTimer.reset(); 204 flipBackTimer.addEventListener(TimerEvent.TIMER_COMPLETE,FlipBack); 205 flipBackTimer.start(); 206 score += pointForMiss; 207 208 } 209 210 } 211 else 212 { 213 PlaySound(firstSound); 214 //firstCard.gotoAndStop(1); 215 //secondCard.gotoAndStop(1); 216 firstCard.startFlip(1); 217 secondCard.startFlip(1); 218 firstCard = thiscard; 219 //thiscard.gotoAndStop(thiscard.cardFace+2); 220 thiscard.startFlip(thiscard.cardFace+2); 221 secondCard = null; 222 flipBackTimer.stop(); 223 score += pointForMiss; 224 } 225 226 } 227 private function FlipBack(event:TimerEvent) 228 { 229 if (firstCard != null && secondCard != null) 230 { 231 232 firstCard.startFlip(1); 233 secondCard.startFlip(1); 234 firstCard = null; 235 secondCard = null; 236 237 } 238 flipBackTimer.removeEventListener(TimerEvent.TIMER_COMPLETE,FlipBack); 239 } 240 241 private function PlaySound(soundObj:Object) 242 { 243 var channel:SoundChannel = soundObj.play(); 244 } 245 246 247 } 248 249 }
卡片类代码:
Card10.as
1 package 2 { 3 import flash.events.Event; 4 5 public class Card10 extends Card 6 { 7 8 private var cardface:uint; 9 private var flipToFrame:uint; 10 private var Step:uint; 11 public function Card10():void 12 { 13 cardface=0; 14 } 15 16 public function get cardFace():uint 17 { 18 return cardface; 19 } 20 public function set cardFace(cf:uint):void 21 { 22 cardface=cf; 23 } 24 25 public function startFlip(toWhichFrame:uint) 26 { 27 flipToFrame=toWhichFrame; 28 Step=10; 29 this.addEventListener(Event.ENTER_FRAME,flip); 30 } 31 32 public function flip(event:Event) 33 { 34 Step--; 35 if (Step > 5) 36 { // first half of flip 37 this.scaleX = .20*(Step-6); 38 } 39 else 40 { // second half of flip 41 this.scaleX = .20*(5-Step); 42 } 43 44 if(Step==5) 45 { 46 gotoAndStop(flipToFrame); 47 } 48 49 if(Step==0) 50 this.removeEventListener(Event.ENTER_FRAME,flip); 51 } 52 53 } 54 55 }
把flash嵌入html代码:
<title>DEMO</title> <head> <script type="text/javascript" src="http://files.cnblogs.com/wonderKK/swfobject.js"></script> </head> <body> <form id="Form1"> <div id="flashcontent"> <a href="http://www.adobe.com/go/getflashplayer"> <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" border="0" /> </a> </div> </form> <script type="text/javascript"> var so = new SWFObject("http://files.cnblogs.com/wonderKK/game.swf", "mymovie", "800", "600", "7", "#FFFFFF"); so.write("flashcontent"); </script> </body>