`
xhanxhanxhan
  • 浏览: 207897 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

AS3拼图游戏解析

    博客分类:
  • RIA
阅读更多

 

看了份拼图游戏代码,挺有收获。

 

基本原理:

  • 读取一张图片,切割成小片,按顺序排上位置(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;
		}
 
分享到:
评论

相关推荐

    flash 3.0拼图游戏.zip_as3 拼图游戏_as3.0拼图制作_flash_flash 3.0游戏_flash游戏3.

    本篇将详细解析一个基于AS3.0(ActionScript 3.0)的拼图游戏,帮助开发者理解和掌握AS3.0在创建拼图游戏中的应用技巧。 首先,我们要了解AS3.0相较于之前的版本有了显著的性能提升和语法优化,它是Flash ...

    flashas3拼图游戏源码

    《深入解析Flash AS3拼图游戏源码》 在IT领域,尤其是互动娱乐与游戏开发中,Flash AS3(ActionScript 3)是一种广泛使用的编程语言,它为开发者提供了创建动态网页、游戏和其他互动内容的强大工具。本篇文章将深度...

    as3写的拼图游戏,mvc模式开发,xml配置。

    本文将深入探讨基于ActionScript 3(AS3)编写的拼图游戏,该游戏采用Model-View-Controller(MVC)设计模式,并使用XML配置文件进行数据管理。这对于初学者理解MVC模式以及AS3在游戏开发中的应用极具价值。 首先,...

    一个拼图游戏的源文件

    《拼图游戏源文件解析——基于Flash AS2.0》 拼图游戏,作为一种深受各年龄段用户喜爱的娱乐方式,其背后的编程实现同样引人入胜。本篇将深入探讨一款由AS2.0(ActionScript 2.0)编写的Flash拼图游戏的源文件,带...

    as2.0 拼图

    本教程将深入探讨如何使用AS2.0制作一个简单的拼图游戏。 一、基础知识 1. ActionScript 2.0:AS2.0是Flash MX 2004引入的版本,它基于ECMAScript 3,增强了面向对象编程的能力。AS2.0中的主要概念包括变量、函数...

    flash拼图游戏源代码

    《深入解析Flash拼图游戏源代码》 Flash作为一种曾经风靡全球的交互式矢量图形和多媒体开发平台,为无数的网页游戏提供了丰富的创意空间。本文将围绕“Flash拼图游戏源代码”这一主题,深入探讨其背后的编程原理、...

    flash cs3 纯代码拼图游戏源代码

    《深入解析Flash CS3拼图游戏源代码》 在数字媒体和互动娱乐领域,Flash CS3是一款曾经广泛应用的动画和游戏开发工具。本篇将详细探讨一个基于Flash CS3开发的纯代码拼图游戏,旨在帮助读者理解其背后的编程原理和...

    actionscript3.0拼图游戏小技巧代码

    在本示例中,我们看到的是一段用于实现拼图游戏的小技巧代码。让我们详细解析一下这个代码片段,了解它是如何工作的。 首先,我们导入所需的事件类和显示对象类: ```actionscript import flash.events.Event; ...

    Flash as3.0制作的16个小游戏源码。

    9. **拼图游戏**:拼图游戏需要处理图像分割、拖放操作和位置验证。开发者可以从中学习AS3.0对图形操作和用户输入事件的处理。 10. **手枪射击**:手枪射击游戏涉及到射击准心、子弹轨迹和命中反馈。源码分析可以...

    flash 拼图游戏

    《Flash CS3 ActionScript 3.0 游戏开发:拼图游戏实例解析》 Flash技术作为曾经在互联网上广泛使用的交互式内容创作工具,以其强大的动画制作和编程能力深受开发者喜爱。Flash CS3是Adobe公司发布的一个版本,它...

    VB拼图游戏源代码.doc

    根据提供的文件信息,我们可以分析出这是一段使用Visual Basic(简称VB)编写的拼图游戏程序的源代码。下面将详细解析这段代码所涉及的重要知识点和技术细节。 ### 1. 变量声明与初始化 在VB中,变量的声明非常...

    (精品word)用flash制作拼图游戏图解.doc

    本文档提供了使用Adobe Flash 8.0和Macromedia Fireworks 8创建拼图游戏的详细步骤。作者通过一系列的操作指导,教你如何从素材制作到游戏功能实现,完成一个完整的拼图游戏。 【核心知识点】 1. **素材制作**: ...

    用flash as3写的八数码程序

    《用Flash AS3编写的八数码程序解析》 在信息技术领域,编程语言和算法的巧妙结合可以创造出各种有趣且实用的应用。本篇文章将深入探讨一个使用ActionScript 3(AS3)开发的八数码游戏程序,它巧妙地利用了A*搜索...

    flash游戏,puzzle_game

    今天我们将聚焦于一种特别的游戏类型——拼图游戏,尤其是使用ActionScript 3(AS3)编程语言实现的"Puzzle_game"。AS3是Flash Professional中的主要编程语言,它提供了强大的功能,可以创建动态、交互性强的Web内容...

    flash制作拼图

    本文将以“Flash游戏制作——小熊拼图”为例,详细解析如何利用Flash软件制作一款经典的拼图游戏。 ### 一、项目准备与素材导入 #### 1. 选择合适的图片 在游戏开发的初期阶段,选择一幅高质量且具有吸引力的图片...

    带xml加载外部图片的拼图

    在Flash环境中,我们可以利用AS3(ActionScript 3)的XML类来解析XML文件。首先,我们需要加载XML文件,然后解析其内容。例如,我们可以创建一个XML对象,调用`load()`方法加载XML文件,再用`addEventListener()`...

    Flash AS 3.0 里面有15个小游戏

    - **flash 3.0拼图游戏**:图像处理,拼图算法,可能包含旋转和拖放功能。 - **flash 3.0小游戏3D地球**:三维图形渲染,可能使用ActionScript 3.0的3D库。 - **flash 3.0扫雷**:数字逻辑,随机布雷,游戏界面...

    flashpintu_flash源码_

    而“Flash拼图游戏”作为一款常见的休闲娱乐应用,其源码的解析对于学习Flash AS3(ActionScript 3)语言具有极高的价值。 首先,源码中的核心部分通常包括游戏逻辑、用户交互和图形渲染。游戏逻辑是指拼图的生成、...

Global site tag (gtag.js) - Google Analytics