在上篇说到,拼图游戏做到一半不知道怎么做也不想再做了,但前几天看到一些方法,知道了下一步该怎么做,而最近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]拼图游戏 - 贫嘴的鱼 - 贫嘴的鱼的博客 [AS3]拼图游戏 - 贫嘴的鱼 - 贫嘴的鱼的博客](http://space.flash8.net/bbs/images/attachicons/flash.gif)
![[AS3]拼图游戏 - 贫嘴的鱼 - 贫嘴的鱼的博客 [AS3]拼图游戏 - 贫嘴的鱼 - 贫嘴的鱼的博客](http://space.flash8.net/bbs/images/attachicons/rar.gif)
用记事本打开这个目录下的FlashPlayerTrust文件夹下的myTrustFiles.cfg文件(没有就创建一个)允许哪个路径下的 SWF文件可以与internet通信的就把路径写上。。最简便的方法当然是把你机器里所有的盘都给他写上...保存关闭。OK了