- 浏览: 128427 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhanchaojiang:
...
Flash使用到数学、物理的公式 -
沈冠军:
太好啦,呵呵···
用Flex Builder创建第一个Flex AIR程序 -
zht110227:
代码能加上点注释吗?看着效果更好。
Flex的通信方式(N)——URLLoader -
yangkd548:
可能是SWF是2.0的原因吧,你用3.0的试试吧
Flex与Flash的交互_1(初级简单示例) -
aotie:
你好我套用你的模式!做为什么这句 flashMc=flashC ...
Flex与Flash的交互_1(初级简单示例)
下面这个类封装了3个公共的静态方法,简单的碰撞检测可以直接使用complexHitTestObject,需要更加复杂的,那就需要看明白下面的代码,并使用3个公共的静态方法
这个类是一个外国人写的,原文地址如下:
http://www.tink.ws/blog/as-30-hittest
这个类是一个外国人写的,原文地址如下:
http://www.tink.ws/blog/as-30-hittest
package ws.tink.display { import flash.display.BitmapData; import flash.display.BlendMode; import flash.display.DisplayObject; import flash.display.Sprite; import flash.geom.ColorTransform; import flash.geom.Matrix; import flash.geom.Point; import flash.geom.Rectangle; public class HitTest { public static function complexHitTestObject( target1:DisplayObject, target2:DisplayObject, accurracy:Number = 1 ):Boolean { return complexIntersectionRectangle( target1, target2, accurracy ).width != 0; } public static function intersectionRectangle( target1:DisplayObject, target2:DisplayObject ):Rectangle { // If either of the items don't have a reference to stage, then they are not in a display list // or if a simple hitTestObject is false, they cannot be intersecting. if( !target1.root || !target2.root || !target1.hitTestObject( target2 ) ) return new Rectangle(); // Get the bounds of each DisplayObject. var bounds1:Rectangle = target1.getBounds( target1.root ); var bounds2:Rectangle = target2.getBounds( target2.root ); // Determine test area boundaries. var intersection:Rectangle = new Rectangle(); intersection.x = Math.max( bounds1.x, bounds2.x ); intersection.y = Math.max( bounds1.y, bounds2.y ); intersection.width = Math.min( ( bounds1.x + bounds1.width ) - intersection.x, ( bounds2.x + bounds2.width ) - intersection.x ); intersection.height = Math.min( ( bounds1.y + bounds1.height ) - intersection.y, ( bounds2.y + bounds2.height ) - intersection.y ); return intersection; } public static function complexIntersectionRectangle( target1:DisplayObject, target2:DisplayObject, accurracy:Number = 1 ):Rectangle { if( accurracy <= 0 ) throw new Error( "ArgumentError: Error #5001: Invalid value for accurracy", 5001 ); // If a simple hitTestObject is false, they cannot be intersecting. if( !target1.hitTestObject( target2 ) ) return new Rectangle(); var hitRectangle:Rectangle = intersectionRectangle( target1, target2 ); // If their boundaries are no interesecting, they cannot be intersecting. if( hitRectangle.width * accurracy <1 || hitRectangle.height * accurracy <1 ) return new Rectangle(); var bitmapData:BitmapData = new BitmapData( hitRectangle.width * accurracy, hitRectangle.height * accurracy, false, 0x000000 ); // Draw the first target. bitmapData.draw( target1, HitTest.getDrawMatrix( target1, hitRectangle, accurracy ), new ColorTransform( 1, 1, 1, 1, 255, -255, -255, 255 ) ); // Overlay the second target. bitmapData.draw( target2, HitTest.getDrawMatrix( target2, hitRectangle, accurracy ), new ColorTransform( 1, 1, 1, 1, 255, 255, 255, 255 ), BlendMode.DIFFERENCE ); // Find the intersection. var intersection:Rectangle = bitmapData.getColorBoundsRect( 0xFFFFFFFF,0xFF00FFFF ); bitmapData.dispose(); // Alter width and positions to compensate for accurracy if( accurracy != 1 ) { intersection.x /= accurracy; intersection.y /= accurracy; intersection.width /= accurracy; intersection.height /= accurracy; } intersection.x += hitRectangle.x; intersection.y += hitRectangle.y; return intersection; } protected static function getDrawMatrix( target:DisplayObject, hitRectangle:Rectangle, accurracy:Number ):Matrix { var localToGlobal:Point; var matrix:Matrix; var rootConcatenatedMatrix:Matrix = target.root.transform.concatenatedMatrix; localToGlobal = target.localToGlobal( new Point( ) ); matrix = target.transform.concatenatedMatrix; matrix.tx = localToGlobal.x - hitRectangle.x; matrix.ty = localToGlobal.y - hitRectangle.y; matrix.a = matrix.a / rootConcatenatedMatrix.a; matrix.d = matrix.d / rootConcatenatedMatrix.d; if( accurracy != 1 ) matrix.scale( accurracy, accurracy ); return matrix; } } }
发表评论
-
Flash网页游戏的技术内容
2013-06-07 09:55 0经过5年的从业经历,现在应该对Flash网页游戏的工作内容 ... -
安全沙箱问题实例
2012-10-12 15:14 1006安全沙箱问题实例 案例1: swf加载资源需要知道资源的地址 ... -
Flash使用到数学、物理的公式
2012-02-17 12:40 1394基本三角函数的计算: ... -
FlashDevelop配置、使用随笔
2011-12-20 17:19 2965安装基础配置见 1、http://www.cnblogs.co ... -
动画旋转移动、沿鼠标绘制轨迹移动
2011-08-01 15:12 1740package common{ import core ... -
常用资源备份
2011-05-06 13:19 11611、显示到该trace位置的 ... -
Flash 程序屏幕自适应的实现
2010-12-10 15:09 3779首先确定一个最外层的容器,针对于一下两种情况作处理 1、其内部 ... -
FD编辑器变量高亮插件
2010-12-10 15:06 1275FD变量高亮插件(放在Plugins下) 在代码和左侧边框都可 ... -
禁止Flash右键菜单,禁止放大,左上对齐
2010-08-17 15:17 1780//禁止Flash右键菜单 this.contextMe ... -
加载并使用其他Swf中的类
2010-08-15 16:54 0加载其他的SWF到当前SWF的主域,并可以实例化加载的SWF中 ... -
Flash CS3联合Flash Develop开发的配置
2010-07-20 10:38 1874两个编辑器的关联配置 1.安装Flash CS3编辑器 2.安 ... -
Flash Develop的快捷键
2010-05-19 13:24 2039flashdevelop的快捷键很多 ... -
获取当前Flash的SWF文件所在文件夹绝对路径(AS项目和Flex Web项目)
2010-05-07 11:29 10157首先,说明我测试的系统地址和网络地址的情况: 某电脑一:fil ... -
Flash音乐频谱制作 频率(转)
2010-05-05 15:42 2080音乐频谱的效果,截图的效果: 源码及编译后的SWF见附件 ... -
AS 与 js 交互示例
2010-02-10 17:19 1404ActionScript/Flash代码 package ... -
Flash常用的交互信息加密的方式汇总
2010-02-10 16:16 1325常用的通信加密方式有:MD5(主用用途是验证数据的完整性)、R ... -
模仿下拉列表下拉和收起的动画效果
2010-02-10 15:55 1205/** * 实现下拉列表、弹出菜单出现和隐藏时缓动的效 ... -
拖动元件延时跟随的动画效果
2010-02-10 15:37 850/** * 实现拖动延时效果的代码 */ p ... -
创建Flash CS3组件(二) Flash CS3组件体系
2009-12-29 09:44 1665在Flash MX 2004时代,组件体系相当庞大.核心有U ... -
request.ContentType的可取值
2009-10-26 15:48 3793服务器送给客户端的数据包类型可以是text/html文本,也可 ...
相关推荐
在不规则图片的选择与拾取中,碰撞检测可以帮助我们判断用户点击的区域是否属于图片的一部分,实现选中功能。 3. 非矩形选择:在常规的图像选择中,我们可以直接使用矩形框来选择图片区域。但在处理不规则图片时,...
在二维空间中,人物运动通常由坐标(x, y)表示,碰撞检测则是判断两个或多个对象(如人物和其他物体)在某一时刻是否重叠。基本的检测方法包括矩形碰撞、圆形碰撞和多边形碰撞。矩形碰撞是最简单的方法,通过比较两个...
5. **设置碰撞检测**:为了使按钮具有交互性,我们需要设置碰撞器(Collider)。在精灵节点上添加一个新的Box Collider或Polygon Collider,然后调整它的形状以匹配你刚刚绘制的边界。对于非矩形形状,Polygon ...
总之,"Android不规则图形点击提示选中不同区域的源码"是一个涉及自定义视图绘制、碰撞检测、事件处理和视觉反馈的综合案例,对于深入理解Android图形系统和交互设计具有很高的参考价值。通过学习和实践,开发者可以...
总结,通过`BezierPath`我们可以灵活地绘制不规则图形,结合`hitTest(_:with:)`或`UIView`子类化,我们可以为这些图形添加点击事件。这种方式使得开发者能够创建具有交互性的自定义UI元素,提升用户体验。在实际项目...
9. **资源管理**:压缩包中的`touchCheck`可能是用于演示或测试的资源,可能包含了一个不规则形状的按钮图片或预设,以及相关的ts脚本文件。解压后放入工程的`assets`目录,可以在Cocos Creator的资源管理器中查看和...
对于大多数游戏场景来说,可能更加适合使用基于矩形包围盒的检测算法,而对于需要精确碰撞的游戏元素(如复杂多边形或不规则形状),像素检测算法则成为了必要的选择。 总结来说,像素检测算法以其精确性在某些特定...
在这个游戏中,Java的类库和面向对象特性被用来构建游戏的核心逻辑,包括小球的创建、运动状态的管理以及碰撞检测。 其次,游戏中的"碰撞"是核心功能之一。在物理世界中,物体碰撞遵循一定的力学规则,如动量守恒和...
7. **碰撞检测和事件触发**:Unity的碰撞检测系统(Collider和Physics)可以帮助识别碎片之间的接触。当碎片之间发生碰撞时,可以触发相应的事件,如碎片的无缝移动或动画播放。 8. **优化与性能**:为了保证游戏在...
7. **游戏逻辑**:坦克大战的核心算法包括坦克的移动规则、碰撞检测、得分计算等。这些都需要开发者编写精确的逻辑代码来实现,例如,使用二维数组表示地图,通过坐标比较进行碰撞检测。 8. **文件I/O操作**:在...
这可能涉及复杂的碰撞检测和排序算法。 7. 响应式设计:在不同尺寸的设备上,图片拖动的效果需要保持一致。因此,开发者需要考虑响应式设计,确保图片大小和位置在不同分辨率和屏幕方向下都能正确显示。 8. 性能...
综上所述,实现"C#基于Form实现多球连续动态碰撞"项目需要对Windows Forms、图形绘制、碰撞检测以及物理原理有深入了解。通过这个项目,不仅可以提升C#编程技能,还能增强对实时系统和物理模拟的理解。
这通常涉及到几何形状的比较,如矩形碰撞检测或更复杂的算法,如旋转包容边界盒(AABB)或分离轴定理(SAT)。 7. **游戏逻辑**:潜艇的移动规则、炮弹轨迹、命中判定、得分系统等都属于游戏逻辑。这部分代码需要...
这通常涉及到几何形状的比较,例如矩形或圆形的碰撞检测算法。 5. **性能优化**:大量图像可能导致内存占用过高,可以考虑使用纹理 atlases(将多个小图打包成一张大图)和精灵表来减少绘制调用次数,提高渲染效率...
开发者需要编写代码来加载图片、绘制精灵、处理碰撞检测以及实现坦克的动画效果。 总的来说,"坦克大战开发图片"是一个包含坦克游戏核心元素的资源集合,它为开发者提供了构建游戏世界的视觉基础,通过结合编程和...
这些都需要用到数据结构(如数组或链表)来存储游戏状态,以及算法(如碰撞检测算法)来处理游戏规则。例如,开发者可能使用二维数组来表示游戏地图,每个元素代表地图上的一个单位,通过遍历这个数组,可以实现坦克...
4. **对象模型**:坦克、子弹等游戏对象的定义和操作,包括属性(位置、方向等)和行为(移动、碰撞检测)。 5. **文件操作**:如何读取和显示图像资源,理解二进制文件和图像文件的处理。 6. **碰撞检测**:实现...
- 游戏开发:JavaScript也可用于构建简单的网页游戏,涉及到图片的移动、碰撞检测等特效。 综上所述,JavaScript图片特效是网页设计中的重要组成部分,通过熟练掌握这些知识点,开发者能够创造出丰富多样的动态...
开发者可能使用了矩形碰撞检测或者更精确的像素级碰撞检测算法。同时,游戏规则的实现,如坦克生命值、得分系统、胜利条件等,也需要严谨的逻辑来实现。 最后,测试和调试也是必不可少的部分。开发者需要确保游戏在...