根据A闪教程学做的拼图游戏(不知道怎么上传swf文件,就不上传了)
图片处理类:作用是载入一个图片,并将图片分割成几个小块,存入一个数组,供文档类调用package
{//此类是加载一个图片,并将图片切割后将其存入一个数组
import flash.display.Loader;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.net.URLRequest;
import flash.display.Sprite;
public class Cut extends EventDispatcher
{
private var x_stage:uint;
private var y_stage:uint;
private var wid_bit:uint;
private var hei_bit:uint;
private var bit_arr:Array = [];
private var url:String;
private var rongqi:Sprite;
public static var CHILD_OVER:String = "child_over";
public function Cut(url_b:String,x_stages:uint=4,y_stages:uint=4):void
{
// 需传递参数,图片地址,横向分几份,给向分几份
url = url_b;
x_stage = x_stages;
y_stage = y_stages;
init(url);
}
private function init(url_bit:String):void
{//加载图片
var bit_load:Loader=new Loader();
bit_load.contentLoaderInfo.addEventListener(Event.COMPLETE,startCut);
bit_load.load(new URLRequest(url_bit));
}
private function startCut(evt:Event):void
{//图片加载完成后,将图片进行分割,并存入数组
var bit_load:Bitmap = evt.target.content as Bitmap;
var bit_data:BitmapData = bit_load.bitmapData;
wid_bit = Math.round(bit_load.width / x_stage);
hei_bit = Math.round(bit_load.height / y_stage);
for (var i:uint=0; i<y_stage; i++)
{
for (var j:uint=0; j<x_stage; j++)
{
var rect:Rectangle = new Rectangle(wid_bit * j,hei_bit * i,wid_bit,hei_bit);
var point:Point = new Point(0,0);
var b_data:BitmapData = new BitmapData(wid_bit,hei_bit);
b_data.copyPixels(bit_data,rect,point);
var b_bitmap:Bitmap = new Bitmap(b_data);
rongqi = new Sprite();
//b_bitmap.x = wid_bit * j + 5 * j;
//b_bitmap.y = hei_bit * i + 5 * i;
rongqi.addChild(b_bitmap);
rongqi.mouseChildren = false;
bit_arr.push(rongqi);
}
}
dispatchEvent(new Event(Cut.CHILD_OVER));
}
public function get arr():Array
{
return bit_arr;
}
}
}
文档类:考虑到第一个小块都是正方形,因此事先将图片改成456*342大小,后面的代码都是按12个小块写的
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
public class Main extends Sprite
{
private var url:String = "funian.jpg";//要裁入的位图名,与flash文件在同一文件夹中
private var img_arr:Array;//用来存放Cut类分割好的小块
private var ditu:Array = new Array(new Array(4),new Array(5),new Array(4));//用来记录每个小块在第几列第几行
private var pailie:Array = new Array();//用来存放每个小块的坐标
private var img:Cut;
private var kuang:Sprite;
var img_sprite:Sprite;
private var se:uint;
public function Main()
{
// constructor code
init(url);
}
private function init(u:String):void
{
kuang = new Sprite();
kuang.graphics.lineStyle(3,0xff0000);
//kuang.graphics.beginFill(0x663399);
kuang.graphics.moveTo(0,0);
kuang.graphics.lineTo(456,0);
kuang.graphics.lineTo(456,114);
kuang.graphics.lineTo(570,114);
kuang.graphics.lineTo(570,228);
kuang.graphics.lineTo(456,228);
kuang.graphics.lineTo(456,342);
kuang.graphics.lineTo(0,342);
kuang.graphics.lineTo(0,0);
kuang.graphics.endFill();
addChild(kuang);
for (var i:uint = 0; i<3; i++)
{
if (i==1)
{
se = 5;
}
else
{
se = 4;
}
for (var j:uint = 0; j<se; j++)
{
ditu = 1;
var zuobiao:Array = ;
pailie.push(zuobiao);
}
}
img = new Cut(u,4,3);
img.addEventListener(Cut.CHILD_OVER,xianshi);
}
private function xianshi(evt:Event):void
{
img_arr = img.arr;
for (var n:uint = 0; n<img_arr.length; n++)
{
var num:uint = Math.floor(Math.random() * pailie.length);
var weizhi:Array = pailie;
img_sprite = img_arr;
pailie.splice(num,1);
addChild(img_sprite);
img_sprite.x = weizhi;
img_sprite.y = weizhi;
ditu / 114] / 114] = 0;
//trace(ditu);
img_sprite.addEventListener(MouseEvent.CLICK,dong);
}
}
private function dong(evt:MouseEvent):void
{
var x_myself:uint = evt.target.x/114;
var y_myself:uint = evt.target.y/114;
var zuo:uint = x_myself - 1;
var you:uint = x_myself + 1;
var shang:uint = y_myself - 1;
var xia:uint = y_myself + 1;
if (zuo!=4294967295 && ditu == 1)
{
ditu = 1;
ditu = 0;
evt.target.x -=114;
}
else if (you!=4 && y_myself !=1 && ditu == 1)
{
ditu = 1;
ditu = 0;
evt.target.x +=114;
}
else if (you!=5 && y_myself ==1 && ditu == 1)
{
ditu = 1;
ditu = 0;
evt.target.x +=114;
}
else if (shang!=4294967295 && ditu==1)
{
ditu = 1;
ditu = 0;
evt.target.y -=114;
}
else if (xia!=3 && ditu==1)
{
ditu = 1;
ditu = 0;
evt.target.y +=114;
}
}
}
}
【11RIA 闪客社区,评分公示】:
是否有价值:一般(银子 +10贡献 +1)
是否原创:是(金子 +1)
是否翻译:否
如对自己的评分有疑问,则咨询版主、管理员等。 谢谢楼主分享! 学习学习!!! 雪原xy 发表于 2019-4-22 06:34
学习学习!!!
互相学习 有一个问题,您看看下图:
另外,如果换一张图片大小就会发生变化,如图 雪原xy 发表于 2019-4-22 15:06
有一个问题,您看看下图:
另外,如果换一张图片大小就会发生变化,如图 ...
第一个问题我也发现了,是我记错了,应该是12个方格中有11个小图片。第二个里面是不是图片的大小不符合?因为将图片的宽平分为4份,高平分为3份后,这样得到的12个小图片要是正方形。也就是说大图片的宽和高的比应该是4:3 qiuhao 发表于 2019-4-22 20:16
第一个问题我也发现了,是我记错了,应该是12个方格中有11个小图片。第二个里面是不是图片的大小不符合? ...
应该是这样的,但是一幅图缺少一块,总是感觉不爽 本帖最后由 雪原xy 于 2019-4-22 21:53 编辑
qiuhao 发表于 2019-4-22 20:57
应该是这样的,但是一幅图缺少一块,总是感觉不爽
我认为,最后一块可以固定在一个位置,当拼图完成后,自动填入,会更合理
第二个问题,各个小块不一定是正方形,长方形也可以呀?
雪原xy 发表于 2019-4-22 21:51
我认为,最后一块可以固定在一个位置,当拼图完成后,自动填入,会更合理
第二个问题,各个小块不一定是 ...
有道理,过几天有时间按你说的改下试试
页:
[1]
2