2010-7-7 08:55
lufy
一,简单flash代码实现连连看
不做不知道,连连看原来如此简单
四个as类加一张图片
Main.as文件
package LianLian.Mains {
import flash.display.Sprite;
import flash.display.Shape;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.events.Event;
import LianLian.Box.ImageBox;
import LianLian.Image.ImageCtrl;
public class Main extends Sprite{
//声明Bitmap
private var _image:Bitmap;
//图片载入器
private var _pic_loader:Loader;
//图片数组
public var _imageArr:Array;
public var _mapLeng:int;
//数据数组
public var _mapArr:Array;
//小块数组
public var _boxArr:Array;
//小块
private var _box:ImageBox;
//点击图片数组
public var _clickArr:Array;
//线数组
public var _lineArr:Array;
//底层Sprite
private var _spriteImage:Sprite;
//线Sprite
private var _spriteLine:Sprite;
//搜索类
private var _query:QueryRoad;
//画线时间控制
private var _lineCtrl:int;
//画线笔刷
private var _shapes:Shape;
/**
*Main类
*构造器
*/
public function Main() {
//初始化各个数据
//添加底层画板和线画板
_spriteImage = new Sprite();
_spriteLine = new Sprite();
addChild(_spriteImage);
addChild(_spriteLine);
_clickArr = new Array();
_mapArr = new Array();
_boxArr = new Array();
_lineArr = new Array();
_query = new QueryRoad(this);
//设置数组长度
_mapLeng = 8;
//载入外部图片
_pic_loader = new Loader();
_pic_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadImage);
_pic_loader.load(new URLRequest("image.jpg"));
}
/**
*载入外部图片完毕
*/
private function onLoadImage(event:Event):void {
_pic_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoadImage);
_image = Bitmap(_pic_loader.content);
//拆分图片
_imageArr = ImageCtrl.divide(_image,15,1);
//随机数组生成与显示
setMapArr(_mapLeng);
}
/**
*连接判断
*返回值:无
*/
public function checkClick():void{
//点击图片数小于2的时候,无处理
if(_clickArr.length < 2){
return;
}
//开始检索判断
//判断两个图片是否相同
if(_clickArr[0]._index != _clickArr[1]._index){
//如果两个图片无法消去
_clickArr[0].alpha = 1;
_clickArr.splice(0,1);
return;
}
//进行搜索
_query.queryCheck();
//如果两个图片可以消去
if(_lineArr.length > 0){
_lineCtrl = 0;
this.addEventListener(Event.ENTER_FRAME, onFrame);
}else{
//如果两个图片无法消去
_clickArr[0].alpha = 1;
_clickArr.splice(0,1);
}
}
/**
*贞函数
*/
private function onFrame(event:Event):void {
//画线
if(_lineCtrl == 0){
_shapes = new Shape();
_shapes.graphics.lineStyle(1, 0xFF0000, 1);
for(var i:int = 0;i<_lineArr.length - 1;i++){
_shapes.graphics.moveTo(_lineArr[i]._point.x*50 + 25,_lineArr[i]._point.y*50 + 25);
_shapes.graphics.lineTo(_lineArr[i + 1]._point.x*50 + 25,_lineArr[i + 1]._point.y*50 + 25);
}
_shapes.graphics.endFill( );
_spriteLine.addChild(_shapes);
}
//清除线,并消去相同图片
if(_lineCtrl >= 5){
this.removeEventListener(Event.ENTER_FRAME, onFrame);
_spriteLine.removeChildAt( 0 );
_clickArr[0].setImageData(0);
_clickArr[1].setImageData(0);
_clickArr.splice(0,_clickArr.length);
_lineArr.splice(0,_lineArr.length);
}
_lineCtrl ++;
}
/**
*数据数组GET
*参数
* 数组长度
*返回值:成对随机数组
*/
private function setMapArr(len:int):void{
var arr:Array = new Array();
//得到总图片数
var leng:int = Math.pow(len,2);
var i:int;
var ran_value:int;
//成对生成随机数据
for(i=0;i<leng/2;i++){
ran_value = Math.random()*15 + 1;
arr.push(ran_value);
arr.push(ran_value);
}
getDataArr(len + 2);
//将成对数组乱序抽出,生成数据数组
for(i=0;i<leng;i++){
ran_value = Math.random()*arr.length;
_box = _boxArr[Math.floor(i/len) + 1][i%len + 1];
_box.setImageData(arr[ran_value]);
//删除已经添加的数据
arr.splice(ran_value,1);
}
}
/**
*空数据数组GET
*参数
* 数组长度
*返回值:空数据数组
*/
private function getDataArr(len:int):void{
var i:int;
var j:int;
var arr:Array;
for(i=0;i<len;i++){
arr = new Array();
for(j=0;j<len;j++){
_box = new ImageBox(j,i,this);
_box.x = j*50;
_box.y = i*50;
_spriteImage.addChild(_box);
arr.push(_box);
}
_boxArr.push(arr);
}
}
}
}
ImageCtrl.as文件
package LianLian.Image{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.geom.Point;
public class ImageCtrl {
public function ImageCtrl() {
}
/*
图片拆分
*参数
source:原图片,row:图片列数,col:图片行数
*返回值:载入小图片的数组
*/
public static function divide(source:Bitmap,row:int,col:int,total:* = null):Array {
//计算出每个小位图对象的宽度
var w:uint=source.width/row;
//计算出每个小位图对象的高度
var h:uint=source.height/col;
//计算有效位图总数
total=total==null?col*row:total;
//定义结果数组
var result:Array= new Array();
//定义矩阵
var matrix:Matrix = new Matrix();
//定义矩形
var rect:Rectangle=new Rectangle(0,0,w,h);
out:for (var j:int = 0; j < col; j++) {
var tempArr:Array = new Array();
for (var i:int = 0; i < row; i++) {
if (total<=0) {
break out;
}
//新建小位图对象
var bmp:BitmapData=new BitmapData(w,h,true,0x00000000);
//定义矩阵的焦点
matrix.tx=- i*w;
matrix.ty=- j*h;
//将矩阵内的数据按定义好的矩形大小和相应位置,画出小位图对象像素
bmp.draw(source,matrix,null,null,rect,true);
tempArr.push(bmp);
total--;
}
result.push(tempArr);
}
return result;
}
}
}
ImageBox.as文件
package LianLian.Box {
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Point;
import LianLian.Mains.Main;
public class ImageBox extends Sprite{
//声明Bitmap
private var _image:Bitmap;
//値
public var _index:int;
//位置
public var _point:Point;
//main类
private var _main:Main;
public function ImageBox(pointx:int,pointy:int,main:Main) {
_main = main;
//小块位置
_point = new Point(pointx,pointy);
//值设为空
_index = 0;
_image = new Bitmap(null);
//添加显示
this.addChild(_image);
//添加点击事件
this.addEventListener(MouseEvent.CLICK, onClick);
}
/**
*设置图片
*参数
* 值
*返回值:无
*/
public function setImageData(index:int):void{
_index = index;
if(index == 0){
_image.bitmapData = null;
this.buttonMode = false;
}else{
_image.bitmapData = _main._imageArr[0][index - 1];
this.buttonMode = true;
}
}
/**
*点击事件
*/
private function onClick(event:MouseEvent):void{
if(_main._clickArr.length >= 2){
return;
}else{
//二次点击禁止
if(this.alpha < 1){
return;
}
//点击后设置透明度为0.5
this.alpha = 0.5;
_main._clickArr.push(this);
//相同判断开始
_main.checkClick();
}
}
}
}
QueryRoad.as文件
package LianLian.Mains {
public class QueryRoad {
private var _main:Main;
public function QueryRoad(main:Main) {
_main = main;
}
public function queryCheck():void{
var checkResult:Boolean = false;
var x1:int = _main._clickArr[0]._point.x;
var y1:int = _main._clickArr[0]._point.y;
var x2:int = _main._clickArr[1]._point.x;
var y2:int = _main._clickArr[1]._point.y;
//逐步进行检查,如果两个图片可以相连,则将画线需要经过的折点存入_lineArr数组,准备画线
//横向检查
checkResult = checkRow(x1,y1,x2,y2);
if(checkResult){
_main._lineArr.push(_main._clickArr[0]);
_main._lineArr.push(_main._clickArr[1]);
return;
}
//纵向检查
checkResult = checkCol(x1,y1,x2,y2);
if(checkResult){
_main._lineArr.push(_main._clickArr[0]);
_main._lineArr.push(_main._clickArr[1]);
return;
}
//一次折线检查
checkResult = checkOnce(x1,y1,x2,y2);
if(checkResult){
_main._lineArr.unshift(_main._clickArr[0]);
_main._lineArr.push(_main._clickArr[1]);
return;
}
//二次折线检查横向检测
checkResult = checkTwiceRow(x1,y1,x2,y2);
if(checkResult){
_main._lineArr.unshift(_main._clickArr[0]);
_main._lineArr.push(_main._clickArr[1]);
return;
}
//二次折线检查纵向检测
checkResult = checkTwiceCol(x1,y1,x2,y2);
if(checkResult){
_main._lineArr.unshift(_main._clickArr[0]);
_main._lineArr.push(_main._clickArr[1]);
return;
}
}
/**
* 二次折线检查横向检测
*判断四种情况,
*1表示点击图片,0表示检索路径,3表示其他图片
*一
*0000
*0330
*1331
*二
*1331
*0330
*0000
*三
*1333
*0333
*0000
*3330
*3331
*四
*3331
*3330
*0000
*0333
*1333
*/
private function checkTwiceRow(x1:int,y1:int,x2:int,y2:int):Boolean
{
var checkResult:Boolean;
for(var i:int = 0;i<_main._mapLeng + 2;i++){
if(x1<=x2){
if(checkRow(x1-1,i,x2 + 1,i)){
if(checkCol(x1,y1,x1,i)&&checkCol(x2,y2,x2,i)){
checkResult = true;
_main._lineArr.push(_main._boxArr[i][x1]);
_main._lineArr.push(_main._boxArr[i][x2]);
break;
}
}
}else{
if(checkRow(x2-1,i,x1 + 1,i)){
if(checkCol(x1,y1,x1,i)&&checkCol(x2,y2,x2,i)){
checkResult = true;
_main._lineArr.push(_main._boxArr[i][x1]);
_main._lineArr.push(_main._boxArr[i][x2]);
break;
}
}
}
}
return checkResult;
}
/**
* 二次折线检查纵向检测
*判断四种情况,
*1表示点击图片,0表示检索路径,3表示其他图片
*一
*1000
*3330
*1000
*二
*0001
*0333
*0001
*三
*10033
*33033
*33033
*33033
*33001
*四
*33001
*33033
*33033
*33033
*10033
*/
private function checkTwiceCol(x1:int,y1:int,x2:int,y2:int):Boolean
{
var checkResult:Boolean;
for(var i:int = 0;i<_main._mapLeng + 2;i++){
if(y1<y2){
if(checkCol(i,y1-1,i,y2 + 1)){
if(checkRow(x1,y1,i,y1)&&checkRow(x2,y2,i,y2)){
checkResult = true;
_main._lineArr.push(_main._boxArr[y1][i]);
_main._lineArr.push(_main._boxArr[y2][i]);
break;
}
}
}else{
if(checkCol(i,y2-1,i,y1 + 1)){
if(checkRow(x1,y1,i,y1)&&checkRow(x2,y2,i,y2)){
checkResult = true;
_main._lineArr.push(_main._boxArr[y1][i]);
_main._lineArr.push(_main._boxArr[y2][i]);
break;
}
}
}
}
return checkResult;
}
/**
* 一次折线检查
*判断四种情况,
*1表示点击图片,0表示检索路径,3表示其他图片
*一
*1000
*3330
*3331
*二
*0001
*0333
*1333
*三
*1333
*0333
*0001
*四
*3331
*3330
*1000
*/
private function checkOnce(x1:int,y1:int,x2:int,y2:int):Boolean
{
var checkResult:Boolean;
if(x1<x2)
{
checkResult = checkRow(x1,y1,x2+1,y1)&&checkCol(x2,y1,x2,y2);
if(checkResult){
_main._lineArr.push(_main._boxArr[y1][x2]);
}else{
checkResult = checkRow(x1 - 1,y2,x2,y2)&&checkCol(x1,y1,x1,y2);
if(checkResult){
_main._lineArr.push(_main._boxArr[y2][x1]);
}
}
}else{
checkResult = checkRow(x1,y2,x1,y1)&&checkCol(x1 + 1,y2,x2,y2);
if(checkResult){
_main._lineArr.push(_main._boxArr[y2][x1]);
}else{
checkResult = checkRow(x2 - 1,y1,x1,y1)&&checkCol(x2,y2,x2,y1);
if(checkResult){
_main._lineArr.push(_main._boxArr[y1][x2]);
}
}
}
return checkResult;
}
/**
* 横向检查
*这个简单,只需要判断两个图片中间是否有其他图片即可
*/
private function checkRow(x1:int,y1:int,x2:int,y2:int):Boolean{
var checkResult:Boolean = true;
var i :int;
if(y1 != y2){
return false;
}else if(Math.abs(x1 - x2) == 1){
return true;
}
for(i = Math.min(x1,x2) +1;i<Math.max(x1,x2);i++)
{
if(_main._boxArr[y1][i]._index==0){
checkResult = true;
} else{
checkResult = false;
break;
}
}
return checkResult;
}
/**
* 纵向检查
*这个简单,只需要判断两个图片中间是否有其他图片即可
*/
private function checkCol(x1:int,y1:int,x2:int,y2:int):Boolean{
var checkResult:Boolean = true;
var i : int;
if(x1 != x2){
return false;
}else if(Math.abs(y1 - y2) == 1){
return true;
}
for(i = Math.min(y1,y2) +1;i<Math.max(y1,y2);i++)
{
if(_main._boxArr[i][x1]._index==0){
checkResult = true;
} else{
checkResult = false;
break;
}
}
return checkResult;
}
}
}
2011-2-15 11:56
lufy
是男人就下100层
最近买了android,在电车上挺无聊的,给android做了个小游戏玩玩,顺便弄了个flash版
游戏画面如下:
[img]http://i818.photobucket.com/albums/zz104/lufy_photo/100.jpg?t=1297731116[/img]
游戏测试URL如下:
[url]http://lufy.hp2.jp/sample/jump/[/url]
这个游戏实现起来很简单,代码也很少,首先需要几个碎图:
[img]http://i818.photobucket.com/albums/zz104/lufy_photo/jump.jpg?t=1297731139[/img]
因为游戏简单,直接把相应的图做成MC来的比较快
一共以下几个MC
游戏精灵,普通地板,可旋转地板,左移地板,右移地板,弹跳地板,减HP地板
在各个MC内部添加几行代码
/*********可旋转地板**************/
//是否可站立,游戏精灵存在,则开始播放,在第五贞设定为false,并且开始翻转,表示不可站立
var st:Boolean = true;
var fun:Function;
stop();
/*********左移地板**************/
import flash.display.Sprite;
var st:Boolean = true;
var charaIsMove:Boolean = true;
//游戏精灵
var chara:Sprite;
onMove();
function onMove():void{
if(chara != null){
//游戏精灵不为空的时候,将游戏精灵向左移
if(chara.x < this.x || chara.x > this.x + this.width){
chara = null;
st = false;
}else{
chara.x -= 2;
}
}
}
/*********右移地板**************/
import flash.display.Sprite;
var st:Boolean = true;
var charaIsMove:Boolean = true;
//游戏精灵
var chara:Sprite;
onMove();
function onMove():void{
if(chara != null){
//游戏精灵不为空,将精灵向右移
if(chara.x < this.x || chara.x > this.x + this.width){
chara = null;
st = false;
}else{
chara.x += 2;
}
}
}
/*********弹跳地板**************/
import flash.display.Sprite;
var st:Boolean = true;
var charaIsMove:Boolean = true;
var chara:Object;
stop();
function onJump():void{
if(chara != null){
//游戏精灵不为空,则弹跳
chara.jumpSpeed = -15;
chara.jump = true;
chara = null;
}
}
/*********减HP地板**************/
//表示可站立
var st:Boolean = true;
//减HP
var minsHp:Boolean = true;
游戏实现部分,只需要一个类Main,下面是所有代码
package game {
import flash.display.Sprite;
import flash.utils.getDefinitionByName;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.events.KeyboardEvent;
import flash.display.Shape;
import flash.display.DisplayObjectContainer;
import flash.system.fscommand;
//import flash.desktop.NativeApplication;
public class Main extends Sprite{
private var _chara:chara = new chara();
private var _wall:Sprite = new Sprite();
private var _bak:Sprite = new Sprite();
private var _bakImg:bak = new bak();
private var _mai:mai = new mai();
private var _ue:ue = new ue();
private var _hp:hp = new hp();
private var _chara_ctrl:Boolean = false;
private var _sectend:int = 0;
private var _speed:int = 2;
private var _mcList:Array = new Array();
private var _leftCtrl:Boolean = false;
private var _rightCtrl:Boolean = false;
private var _mcIndex:int = 0;
private var _mcArray:Array = new Array();
private var _txt:TextField = new TextField();
private var _hpIndex:int = 1;
private var _charaOld:int = 1;
private var _shape:Shape = new Shape();
private var _showText:Sprite = new Sprite();
private var _gameStart:Boolean = false;
private var _sound:jiao = new jiao();
private var _hpAdd:int = 0;
//加入地板
private function getMC(my:int = 480,mx:int = -1):void{
var i:int = Math.floor(Math.random()*_mcArray.length);
var ClassReference:Class;
ClassReference = getDefinitionByName(_mcArray[i]) as Class;
var nmc:Sprite = new ClassReference as Sprite;
nmc.y = my - this._wall.y;
if(mx < 0){
nmc.x = Math.floor(Math.random()*270) - 50;
}else{
nmc.x = mx;
}
this._mcList.push(nmc);
this._bak.addChild(nmc);
}
public function Main() {
//将各种地板加入数组
//普通地板
_mcArray.push("mc");
//可旋转地板
_mcArray.push("toumc");
//左移地板
_mcArray.push("leftMc");
//右移地板
_mcArray.push("rightMc");
//弹跳地板
_mcArray.push("tan");
//减HP地板
_mcArray.push("sMc");
//添加各个画板层
this._bak.addChild(_bakImg);
this._wall.addChild(this._bak);
this._wall.addChild(this._chara);
this._chara.x = 160;
this._chara.y = 100;
this.addChild(this._wall);
this.addChild(_mai);
this.addChild(_ue);
_hp.x = 20;
_hp.y = 460;
this.addChild(_hp);
this.addChild(_shape);
_txt.selectable = false;
_txt.x = 20;
_txt.y = 430;
_txt.width = 200;
_txt.height = 200;
this.addChild(_txt);
this.addChild(_showText);
this.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
this.addEventListener(MouseEvent.MOUSE_UP,onUp);
stage.addEventListener(KeyboardEvent.KEY_DOWN,isKeyDown,false,0,true);
stage.addEventListener(KeyboardEvent.KEY_UP,isKeyUp,false,0,true);
stage.showDefaultContextMenu = false
//fscommand("showmenu", "false");
init();
}
//游戏初始化
private function init():void{
this._bak.y = 0;
this._wall.y = 0;
var i:int;
for(i=0;i<_mcList.length;i++){
this._bak.removeChild(_mcList[i]);
}
_mcList.splice(0,_mcList.length);
this._chara.x = 160;
this._chara.y = 100;
//添加游戏说明框
_shape.graphics.lineStyle(5, 0x000000,0.8);
_shape.graphics.beginFill(0x999999,0.6);
_shape.graphics.drawRoundRect(50,100,220,300,20,20);
_shape.graphics.lineStyle(5, 0x000000,0.8);
_shape.graphics.beginFill(0x999999,0.6);
_shape.graphics.drawRoundRect(70,300,180,40,10,10);
_shape.graphics.lineStyle(5, 0x000000,0.8);
_shape.graphics.beginFill(0x999999,0.6);
_shape.graphics.drawRoundRect(70,350,180,40,10,10);
var txt:TextField = new TextField();
txt.selectable = false;
txt.width = 200;
txt.height = 400;
txt.x = 60;
txt.y = 110;
txt.htmlText = "<font color='#FFFFFF' size='20'><b>" + " 100階にチャレンジ\n\nあなたができますか?\n\n"+
"操作:\n</b></font>" +
"<font color='#FFFFFF' size='15'><b>「←」キーをクリック:\n ・左に移動\n" +
"<font color='#FFFFFF' size='15'><b>「→」キーをクリック:\n ・右に移動\n" +
"</b></font>";
_showText.addChild(txt);
txt = new TextField();
txt.selectable = false;
txt.x = 120;
txt.y = 305;
txt.htmlText = "<font color='#FFFFFF' size='20'><b>" + "スタート"+ "</b></font>";
_showText.addChild(txt);
txt = new TextField();
txt.selectable = false;
txt.x = 120;
txt.y = 355;
txt.htmlText = "<font color='#FFFFFF' size='20'><b>" + " 閉じる"+ "</b></font>";
_showText.addChild(txt);
//gameStart();
}
//游戏结束
private function gameOver():void{
this._chara.jump = false;
_leftCtrl = false;
_rightCtrl = false;
_sound.play();
_hpIndex = 1;
_hp.gotoAndStop(_hpIndex);
_gameStart = false;
_sectend = 0;
this.removeEventListener(Event.ENTER_FRAME,onFrame);
this._bak.y = 0;
this._wall.y = 0;
this._bakImg.y = 0;
var i:int;
for(i=0;i<_mcList.length;i++){
this._bak.removeChild(_mcList[i]);
}
_mcList.splice(0,_mcList.length);
this._chara.x = 160;
this._chara.y = 100;
_shape.graphics.lineStyle(5, 0x000000,0.8);
_shape.graphics.beginFill(0x999999,0.6);
_shape.graphics.drawRoundRect(50,100,220,300,20,20);
_shape.graphics.lineStyle(5, 0x000000,0.8);
_shape.graphics.beginFill(0x999999,0.6);
_shape.graphics.drawRoundRect(70,300,180,40,10,10);
_shape.graphics.lineStyle(5, 0x000000,0.8);
_shape.graphics.beginFill(0x999999,0.6);
_shape.graphics.drawRoundRect(70,350,180,40,10,10);
var txt:TextField = new TextField();
txt.selectable = false;
txt.width = 200;
txt.height = 400;
txt.x = 60;
txt.y = 110;
txt.htmlText = "<font color='#FFFFFF' size='20'><b>" + " GAME OVER\n\n"+
"階数:" + _txt.text +
"\n称号:" + getName(int(_txt.text)) +
"\n</b></font>";
_showText.addChild(txt);
txt = new TextField();
txt.selectable = false;
txt.x = 120;
txt.y = 305;
txt.htmlText = "<font color='#FFFFFF' size='20'><b>" + "スタート"+ "</b></font>";
_showText.addChild(txt);
txt = new TextField();
txt.selectable = false;
txt.x = 120;
txt.y = 355;
txt.htmlText = "<font color='#FFFFFF' size='20'><b>" + " 閉じる"+ "</b></font>";
_showText.addChild(txt);
}
//游戏称号
private function getName(cnt:int):String{
if(cnt < 10){
return "赤ちゃん";
}else if(cnt < 20){
return "子供";
}else if(cnt < 30){
return "小学生";
}else if(cnt < 40){
return "中学生";
}else if(cnt < 50){
return "高校生";
}else if(cnt < 60){
return "大学生";
}else if(cnt < 70){
return "大学院生";
}else if(cnt < 80){
return "専門家";
}else if(cnt < 90){
return "高級専門家";
}else{
return "神";
}
}
//游戏开始
private function gameStart():void{
//在画板上添加3个地板
getMC(300,160);
getMC(350);
getMC(400);
this.addEventListener(Event.ENTER_FRAME,onFrame,false,0,true);
}
//键盘按下
private function isKeyDown(event:KeyboardEvent):void{
if(!_gameStart){
return;
}
if(event.keyCode == 37){
if(_leftCtrl){
return;
}
_leftCtrl = true;
_rightCtrl = false;
this._chara.gotoAndPlay("left");
}else if(event.keyCode == 39){
if(_rightCtrl){
return;
}
_rightCtrl = true;
_leftCtrl = false;
this._chara.gotoAndPlay("right");
}
}
//键盘弹起
private function isKeyUp(event:KeyboardEvent):void{
if(event.keyCode == 37){
_leftCtrl = false;
}else if(event.keyCode == 39){
_rightCtrl = false;
}
}
//鼠标按下
private function onDown(event:MouseEvent):void{
var intX:Number = event.currentTarget.mouseX;
var intY:Number = event.currentTarget.mouseY;
if(_gameStart){
if(intX <= 160){
if(_leftCtrl){
return;
}
_leftCtrl = true;
_rightCtrl = false;
this._chara.gotoAndPlay("left");
}else{
if(_rightCtrl){
return;
}
_rightCtrl = true;
_leftCtrl = false;
this._chara.gotoAndPlay("right");
}
}else if(intX > 70 && intX < 250 && intY > 300 && intY < 340){
_gameStart = true;
_shape.graphics.clear();
this.removeAllChildren(_showText);
gameStart();
}else if(intX > 70 && intX < 250 && intY > 350 && intY < 390){
fscommand("quit");
//stage.nativeWindow.close();
//NativeApplication.nativeApplication.exit();
}
stage.focus = this;
}
//删除地板方法
public function removeAllChildren(
container:DisplayObjectContainer ):void {
var count:int = container.numChildren;
for ( var i:int = 0; i < count; i++ ) {
container.removeChildAt( 0 );
}
}
//鼠标弹起
private function onUp(event:MouseEvent):void{
var intX:Number = event.currentTarget.mouseX;
if(intX <= 160){
_leftCtrl = false;
}else{
_rightCtrl = false;
}
}
//逻辑部分
private function onFrame(event:Event):void{
var speedNum:Number = 0.03;
var downlength:Number;
var _child:Object;
//找到画面外可删除地板,将其删除
if(_mcList.length > 0 && _mcList[0].y - this._wall.y < 40){
_child = _mcList[0] as Object;
if(_child.charaIsMove != null && _child.chara != null){
_child.chara = null;
}
this._bak.removeChild(_mcList[0]);
_mcList.splice(0,1);
}
var i:int;
this._wall.y -= _speed;
//游戏精灵上升下降,以及上升下降幅度控制
if(!_chara_ctrl){
this._chara.y += _speed;
downlength = speedNum*_sectend*_sectend;
if(downlength > 37){
downlength = 37;
}
this._chara.y += downlength;
_sectend++;
}else if(this._chara.jump){
this._chara.y += _speed;
this._chara.y -= 0.06*this._chara.jumpSpeed*this._chara.jumpSpeed;
//charaOld = this._chara.y;
this._chara.jumpSpeed++;
if(this._chara.jumpSpeed >= 0){
this._chara.jump = false;
}
}
//是否处在弹跳阶段
if(!this._chara.jump){
_chara_ctrl = false;
}else{
if(this._chara.jumpSpeed >= 0){
this._chara.jump = false;
}
}
//循环地板数组
for(i=0;!this._chara.jump && i<this._mcList.length;i++){
_child = _mcList[i] as Object;
//找到精灵接触的地板,这里也可以用hitTestObject来判断
if(this._chara.y >= _child.y &&
this._chara.x >= _child.x && _child.st &&
this._chara.x <= _child.x + _child.width && _charaOld <= _child.y+1){
if(_hpAdd > 0 && _charaOld != this._chara.y){
_hpAdd--;
if(_hpAdd == 0 && _hpIndex > 1){
_hpIndex--;
_hp.gotoAndStop(_hpIndex);
}
}
if(_child.charaIsMove != null && _child.charaIsMove){
_child.chara = this._chara;
}
if(_child.minsHp != null && _child.minsHp){
_child.minsHp = false;
_hpIndex++;
_hpAdd = 5;
_hp.gotoAndStop(_hpIndex);
}
this._chara.y = _child.y +1;
_sectend = 1;
_chara_ctrl = true;
_child.play();
break;
}
}
//是否接触到上方的刺针
if(this._chara.hitTestObject(_ue)){
_chara_ctrl = false;
this._chara.jump = false;
this._chara.y += 30;
_sectend = 3;
_hpIndex++;
_hpAdd = 5;
_hp.gotoAndStop(_hpIndex);
}
//循环背景图片,达到连贯显示
if(this._wall.y % 130 == 0){
_bakImg.y += 130;
}
//精灵移动
if(_leftCtrl){
this._chara.x -= _speed*2;
}
if(_rightCtrl){
this._chara.x += _speed*2;
}
if(this._chara.x<25){
this._chara.x = 25;
}
if(this._chara.x>295){
this._chara.x = 295;
}
if(_mcIndex <= 0){
this.getMC();
_mcIndex = Math.floor(Math.random()*60) + 30;
}
_mcIndex--;
//显示楼层
_txt.htmlText = "<font color='#FFFFFF' size='20'>" + Math.floor((-this._wall.y)/480) + "</font>";
_charaOld = this._chara.y;
//判断游戏是否结束
if(_hpIndex >= 4){
gameOver();
}else if(this._chara.y + this._wall.y > 540){
gameOver();
}
}
}
}
小游戏完成了,简单吧?这就是flash,开发小游戏,有着绝对的优势
源码放出,加图片,加音效,总共才102K