[AS3]拼图游戏

  在上篇说到,拼图游戏做到一半不知道怎么做也不想再做了,但前几天看到一些方法,知道了下一步该怎么做,而最近AS3又不知怎么学了,于是就想把它完成,当作练习。

  这个程序写得该是我最简洁的一个(我没说很简洁。。),以前我写的都是乱七八糟的一堆东西,有效果就行了,这次我很注意代码的简洁性了,还加了注释。。前所未有。

源代码:

together.as:

package bang{
 import flash.display.Bitmap
 import flash.display.BitmapData
 import flash.display.Sprite
 import flash.display.Loader
 import flash.display.LoaderInfo
 import flash.net.URLRequest
 import flash.events.MouseEvent
 import flash.events.Event
 import flash.display.Stage
 import flash.geom.Matrix
 import flash.text.TextField
 import flash.geom.Rectangle
 import flash.geom.Point 
 public class together extends Sprite{  
  var loader:Loader
  var ul:String    //URL地址
  var picURL:URLRequest
  var n:uint     //块数=n*n
  var picBD:BitmapData  //整张图的BitmapData
  var picWidth:Number   //图宽
  var picHeight:Number  //图高
  var mySprite:Sprite   //放置块及图的容器
  var massWidth:Number  //块宽
  var massHeight:Number  //块高
  var leaveNum:uint   //剩余块数 用于判断完成
  var picx:Number    //图X坐标
  var picy:Number    //图Y坐标
  public function together(){
   }
  public function loaderPic(){
   picURL=new URLRequest(ul)
   loader=new Loader()
   loader.load(picURL)
   loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete)
  }
  public function onComplete(e:Event){
   mySprite=new Sprite()
   //获得比例<
   var xScale=loader.width/(stage.stageWidth-150)
   var yScale=loader.height/stage.stageHeight
   var picScale:Number   //缩放比例
   if(xScale<yScale){
    picScale=1/yScale
   }else{
    picScale=1/xScale
   }
   if(xScale<1&&yScale<1){
    picScale=1
   }
   //获得比例>   
   picWidth=loader.width*picScale   //缩放后的宽度
   picHeight=loader.height*picScale  //缩放后的高度
   var matrix:Matrix=new Matrix()   //缩放Matrix
   picBD=new BitmapData(picWidth,picHeight)  //整张图的BitmapData
   var bitmap:Bitmap=new Bitmap(picBD)    //添加到场景的整张图
   matrix.scale(picScale,picScale)
   picBD.draw(loader.content,matrix,null,null,null,true)
   bitmap.alpha=0.3
   mySprite.addChild(bitmap)
   picx=Math.round(stage.stageWidth-150-picWidth)/2  //图X坐标
   picy=Math.round(stage.stageHeight-picHeight)/2   //图Y坐标
   mySprite.x=picx
   mySprite.y=picy
   stage.addChild(mySprite)
   copyPixel()
  }
  public function copyPixel(){
   massWidth=Math.round(picWidth/n)   //块宽,round是让空隙出现在边缘
   massHeight=Math.round(picHeight/n)   //块高,同上
   leaveNum=n*n        //剩下的块数
   var massBD:BitmapData
   var massBitmap:Bitmap
   var massSprite:Sprite      //块置放的容器
   for(var i=0;i<n;i++){
    for(var j=0;j<n;j++){
     massBD=new BitmapData(massWidth,massHeight)
     massBD.copyPixels(picBD,new Rectangle(i*massWidth,j*massHeight,massWidth,massHeight),new Point(0,0))
     massBitmap=new Bitmap(massBD)
     massSprite=new Sprite()
     massSprite.x=stage.stageWidth-150+Math.random()*100-picx
     massSprite.y=(stage.stageHeight-200)*Math.random()-picy
     massSprite.addEventListener(MouseEvent.MOUSE_DOWN,massDown)
     massSprite.addEventListener(MouseEvent.MOUSE_UP,massUp)
     massSprite.name="MS"+i+j
     massSprite.addChild(massBitmap)
     mySprite.addChild(massSprite)
    }
   }
   function massDown(e:MouseEvent){
    e.target.startDrag()
    mySprite.addChild(Sprite(e.target))    //让拖动的图片显示在最上面
   }
   function massUp(e:MouseEvent){
    e.target.stopDrag()
    var pici=Number(e.target.name.charAt(2))
    var picj=Number(e.target.name.charAt(3))
    if(Math.abs(e.target.x-pici*massWidth)<=20&&Math.abs(e.target.y-picj*massHeight)<=20){  //粘合
    e.target.removeEventListener(MouseEvent.MOUSE_UP,massUp)
    e.target.removeEventListener(MouseEvent.MOUSE_DOWN,massDown)
    e.target.x=pici*massWidth
    e.target.y=picj*massHeight
   //判断拼图是否完成<
    leaveNum--
    if(leaveNum<=0){
     var end_txt:TextField=new TextField()
     end_txt.text="拼图完成"
     end_txt.x=stage.stageWidth-100
     end_txt.y=stage.stageHeight/2
     stage.addChild(end_txt)
    }
   //判断拼图是否完成>
  }
   }
  }
 }
 
}

loadMC.as:

package bang{
 import flash.display.MovieClip
 import flash.events.MouseEvent
 import flash.text.TextField
 import bang.together
 public class loadMC extends MovieClip{
  public function loadMC(){
   this.load_btn.buttonMode=true
   this.load_btn.addEventListener(MouseEvent.MOUSE_DOWN,onMcDown)
   var s:together=new together()
   function onMcDown(e:MouseEvent){
   //删除上一张图片的内容<
   try{
    while(s.mySprite.numChildren>0){
     s.mySprite.removeChildAt(0)
    }
   }
   catch(e){
   }
   //删除上一张图片的内容>   
   var inputURL:String=e.target.parent.url_txt.text
   var inputN:uint=uint(e.target.parent.n_txt.text)
   s.ul=inputURL
   s.n=inputN
   s.loaderPic()
   stage.addChild(s)
   }
  }
 }
}

 
[AS3]拼图游戏 - 贫嘴的鱼 - 贫嘴的鱼的博客 together.swf (3.81 KB)
//似乎会因为FLASH设置的问题无法访问图片,看不到效果的话就下载下面的看吧。
[AS3]拼图游戏 - 贫嘴的鱼 - 贫嘴的鱼的博客 拼图.rar (95.32 KB)  
 
附:解决FLASH PLAYER安全性问题:
打开C:\Documents and Settings\Administrator\Application Data\Macromedia\Flash Player(我计算机用户名为Administrator,记得把隐藏文件夹打开)

用记事本打开这个目录下的FlashPlayerTrust文件夹下的myTrustFiles.cfg文件(没有就创建一个)允许哪个路径下的 SWF文件可以与internet通信的就把路径写上。。最简便的方法当然是把你机器里所有的盘都给他写上...保存关闭。OK了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游鱼_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值