看了份拼图游戏代码,挺有收获。
基本原理:
- 读取一张图片,切割成小片,按顺序排上位置(XY)。然后打乱
- 监视MOUSEDOWN事件,当鼠标按下时判断和该切片相连的其他切片,找出来后加到drag数据
- 监视MOUSEMOVE时间,drag数组中的切片跟随鼠标移动,造成拖拽效果
- 监视MOUSEUP时间,将DRAG数据中切片移动到设定网格内(类似粘合效果)
- 通过判断切片们的位置判断游戏结束
难点在于有效的算法求出与某切片相连接的其他切片的集合。
切割图片代码:
var bitmap:Bitmap = new Bitmap(new BitmapData(w,h));
var rectangle:Rectangle = new Rectangle(x,y,w,h);
bitmap.bitmapData.copyPixels(fromBitmapData,rectangle,new Point(0,1));
//添加到sprite
sprite.addChild(bitmap);
判断相连切片合集,看了好久才弄懂。
首先求出其他切片与被求切片I的距离,推进数组。
由大致小排序,妙。
设置标记为假,开始循环
-- 依次取出切片(按距离由大到小),判断上下左右4方向是否有标记为DRAG的切片连接
-- 如果存在,推入DRAG数组,移除在被循环数组的位置,设置标记为真
-- 标记为真,继续循环
由于是从大到小的顺序,如果存在相连切片,推入DRAG的顺序肯定是先找到和原始切片连接的,然后再一层层找到与之连接的切片。比我想到的用搜索的笨方法简便了许多,赞。
// find pieces that should move together
public function findLockedPieces(clickedPiece:uint, clickLoc:Point) {
// get list of puzzle objects sorted by distance to the clicked object
var sortedObjects:Array = new Array();
for (var i in puzzleObjects) {
if (i == clickedPiece) continue;
sortedObjects.push({dist: Point.distance(puzzleObjects[clickedPiece].loc,puzzleObjects[i].loc), num: i});
}
sortedObjects.sortOn("dist",Array.DESCENDING);
// loop until all linked piece found
do {
var oneLinkFound:Boolean = false;
// look at each object, starting with closest
for(i=sortedObjects.length-1;i>=0;i--) {
var n:uint = sortedObjects[i].num; // actual object number
// get the position relative to the clicked object
var diffX:int = puzzleObjects[n].loc.x - puzzleObjects[clickedPiece].loc.x;
var diffY:int = puzzleObjects[n].loc.y - puzzleObjects[clickedPiece].loc.y;
// see if this object is appropriately placed to be locked to the clicked one
if (puzzleObjects[n].piece.x == (puzzleObjects[clickedPiece].piece.x + pieceWidth*diffX)) {
if (puzzleObjects[n].piece.y == (puzzleObjects[clickedPiece].piece.y + pieceHeight*diffY)) {
// see if this object is adjacent to one already selected
if (isConnected(puzzleObjects[n])) {
// add to selection list and set offset
beingDragged.push(puzzleObjects[n]);
puzzleObjects[n].dragOffset = new Point(clickLoc.x - puzzleObjects[n].piece.x, clickLoc.y - puzzleObjects[n].piece.y);
// move to top sprite
selectedPieces.addChild(puzzleObjects[n].piece);
// link found, remove from array
oneLinkFound = true;
sortedObjects.splice(i,1);
}
}
}
}
} while (oneLinkFound);
}
// takes an object and determines if it is directly next to one already selected
public function isConnected(newPuzzleObject:Object):Boolean {
for(var i in beingDragged) {
var horizDist:int = Math.abs(newPuzzleObject.loc.x - beingDragged[i].loc.x);
var vertDist:int = Math.abs(newPuzzleObject.loc.y - beingDragged[i].loc.y);
if ((horizDist == 1) && (vertDist == 0)) return true;
if ((horizDist == 0) && (vertDist == 1)) return true;
}
return false;
}
分享到:
相关推荐
本篇将详细解析一个基于AS3.0(ActionScript 3.0)的拼图游戏,帮助开发者理解和掌握AS3.0在创建拼图游戏中的应用技巧。 首先,我们要了解AS3.0相较于之前的版本有了显著的性能提升和语法优化,它是Flash ...
《深入解析Flash AS3拼图游戏源码》 在IT领域,尤其是互动娱乐与游戏开发中,Flash AS3(ActionScript 3)是一种广泛使用的编程语言,它为开发者提供了创建动态网页、游戏和其他互动内容的强大工具。本篇文章将深度...
本文将深入探讨基于ActionScript 3(AS3)编写的拼图游戏,该游戏采用Model-View-Controller(MVC)设计模式,并使用XML配置文件进行数据管理。这对于初学者理解MVC模式以及AS3在游戏开发中的应用极具价值。 首先,...
《拼图游戏源文件解析——基于Flash AS2.0》 拼图游戏,作为一种深受各年龄段用户喜爱的娱乐方式,其背后的编程实现同样引人入胜。本篇将深入探讨一款由AS2.0(ActionScript 2.0)编写的Flash拼图游戏的源文件,带...
本教程将深入探讨如何使用AS2.0制作一个简单的拼图游戏。 一、基础知识 1. ActionScript 2.0:AS2.0是Flash MX 2004引入的版本,它基于ECMAScript 3,增强了面向对象编程的能力。AS2.0中的主要概念包括变量、函数...
《深入解析Flash拼图游戏源代码》 Flash作为一种曾经风靡全球的交互式矢量图形和多媒体开发平台,为无数的网页游戏提供了丰富的创意空间。本文将围绕“Flash拼图游戏源代码”这一主题,深入探讨其背后的编程原理、...
《深入解析Flash CS3拼图游戏源代码》 在数字媒体和互动娱乐领域,Flash CS3是一款曾经广泛应用的动画和游戏开发工具。本篇将详细探讨一个基于Flash CS3开发的纯代码拼图游戏,旨在帮助读者理解其背后的编程原理和...
在本示例中,我们看到的是一段用于实现拼图游戏的小技巧代码。让我们详细解析一下这个代码片段,了解它是如何工作的。 首先,我们导入所需的事件类和显示对象类: ```actionscript import flash.events.Event; ...
9. **拼图游戏**:拼图游戏需要处理图像分割、拖放操作和位置验证。开发者可以从中学习AS3.0对图形操作和用户输入事件的处理。 10. **手枪射击**:手枪射击游戏涉及到射击准心、子弹轨迹和命中反馈。源码分析可以...
《Flash CS3 ActionScript 3.0 游戏开发:拼图游戏实例解析》 Flash技术作为曾经在互联网上广泛使用的交互式内容创作工具,以其强大的动画制作和编程能力深受开发者喜爱。Flash CS3是Adobe公司发布的一个版本,它...
根据提供的文件信息,我们可以分析出这是一段使用Visual Basic(简称VB)编写的拼图游戏程序的源代码。下面将详细解析这段代码所涉及的重要知识点和技术细节。 ### 1. 变量声明与初始化 在VB中,变量的声明非常...
本文档提供了使用Adobe Flash 8.0和Macromedia Fireworks 8创建拼图游戏的详细步骤。作者通过一系列的操作指导,教你如何从素材制作到游戏功能实现,完成一个完整的拼图游戏。 【核心知识点】 1. **素材制作**: ...
《用Flash AS3编写的八数码程序解析》 在信息技术领域,编程语言和算法的巧妙结合可以创造出各种有趣且实用的应用。本篇文章将深入探讨一个使用ActionScript 3(AS3)开发的八数码游戏程序,它巧妙地利用了A*搜索...
今天我们将聚焦于一种特别的游戏类型——拼图游戏,尤其是使用ActionScript 3(AS3)编程语言实现的"Puzzle_game"。AS3是Flash Professional中的主要编程语言,它提供了强大的功能,可以创建动态、交互性强的Web内容...
本文将以“Flash游戏制作——小熊拼图”为例,详细解析如何利用Flash软件制作一款经典的拼图游戏。 ### 一、项目准备与素材导入 #### 1. 选择合适的图片 在游戏开发的初期阶段,选择一幅高质量且具有吸引力的图片...
在Flash环境中,我们可以利用AS3(ActionScript 3)的XML类来解析XML文件。首先,我们需要加载XML文件,然后解析其内容。例如,我们可以创建一个XML对象,调用`load()`方法加载XML文件,再用`addEventListener()`...
- **flash 3.0拼图游戏**:图像处理,拼图算法,可能包含旋转和拖放功能。 - **flash 3.0小游戏3D地球**:三维图形渲染,可能使用ActionScript 3.0的3D库。 - **flash 3.0扫雷**:数字逻辑,随机布雷,游戏界面...
而“Flash拼图游戏”作为一款常见的休闲娱乐应用,其源码的解析对于学习Flash AS3(ActionScript 3)语言具有极高的价值。 首先,源码中的核心部分通常包括游戏逻辑、用户交互和图形渲染。游戏逻辑是指拼图的生成、...