`
icrwen
  • 浏览: 269573 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

使sprite以某个点为中心旋转

阅读更多
package com.everydayflash.util {
       
        import flash.geom.Point;

        /**
         * This class can be used as a replacement for the DisplayObject.rotation property.
         *
         * It rotates a DisplayObject, but it does not limit itself to rotate around the it's
         * registration point, instead it can rotate the object around any point. The point is
         * defined in the objects parent coodrinate system.
         *
         * @author Bartek Drozdz (http://www.everydayflash.com)
         * @version 1.0
         */
        public class Rotator {
               
                private var target:Object;
               
                /**
                 * A value that is based on the initial rotation of the display object itself, and
                 * the angle between the registration point of the display object and of the rotator
                 */
                private var offset:Number;
               
                /**
                 * Registration point - the point around which the rotation takse place
                 */
                private var point:Point;
               
                /**
                 * Distance between the registration point of the display object and the registration
                 * point of the rotator
                 */
                private var dist:Number;

                /**
                 * Registers a DisplayObject that will be rotated and an registration Point around which it will be rotated.
                 *
                 * @param       target DisplayObject to rotate
                 * @param       registrationPoint Point containing the coodrinates around which the object should be rotated
                 *          (in the targets parent coordinate space) If omitted, the displays object x and y coordinates are used
                 */
                public function Rotator(target:Object, registrationPoint:Point=null) {
                        this.target = target;
                        setRegistrationPoint(registrationPoint);
                }
               
                /**
                 * Once set in the constructor, the rotation registration point can be modified an any moment
                 *
                 * @param       registrationPoint, if null defaults to targets x and y coordinates
                 */
                public function setRegistrationPoint(registrationPoint:Point=null):void {
                        if (registrationPoint == null) point = new Point(target.x, target.y);
                        else point = registrationPoint;
                       
                        var dx:Number = point.x - target.x;
                        var dy:Number = point.y - target.y;
                        dist = Math.sqrt( dx * dx + dy * dy );
                       
                        var a:Number = Math.atan2(dy, dx) * 180 / Math.PI;
                        offset = 180 - a + target.rotation;
                }
               
                /**
                 * Sets the rotation to the angle passed as parameter.
                 *
                 * Since it uses a getter/setter Rotator can easily be used with Tween or Tweener classes.
                 */
                public function set rotation(angle:Number):void {
                        var tp:Point = new Point(target.x, target.y);

                        var ra:Number = (angle - offset) * Math.PI / 180;
                       
                        target.x = point.x + Math.cos(ra) * dist;
                        target.y = point.y + Math.sin(ra) * dist;
                       
                        target.rotation =  angle;
                }
               
                /**
                 * Returns current rotation of the target in degrees
                 */
                public function get rotation():Number {
                        return target.rotation;
                }
               
                /**
                 * Rotates the target by the angle passed as parameter.
                 * Works the same as Rotator.rotation += angle;
                 *
                 * @param angle angle by which to rotate the target DisplayObject
                 */
                public function rotateBy(angle:Number):void {
                        var tp:Point = new Point(target.x, target.y);

                        var ra:Number = (target.rotation + angle - offset) * Math.PI / 180;
                       
                        target.x = point.x + Math.cos(ra) * dist;
                        target.y = point.y + Math.sin(ra) * dist;
                       
                        target.rotation =  target.rotation + angle;
                }
        }
}
分享到:
评论

相关推荐

    mnist_10k_sprite.png.rar

    标题中的"mnist_10k_sprite.png.rar"是一个压缩文件,其中包含了一个名为"mnist_10k_sprite.png"的图像文件。这个文件很可能与著名的MNIST数据集有关,MNIST是一个广泛用于计算机视觉领域,特别是手写数字识别的基准...

    ios-SpriteKit摇杆(HSKJoystick).zip

    这通常通过比较帽节点和基座节点的中心点来实现。偏移量可以是二维向量,表示了在x轴和y轴上的移动比例。 4. **物理模拟**: SpriteKit提供了内置的物理世界,但HSKJoystick的摇杆通常不需要物理模拟。然而,...

    SpriteKitActionDemo

    Sprite Kit是Apple为iOS和OS X开发2D游戏而设计的一个强大图形引擎。它提供了一个完整的游戏开发环境,包括物理引擎、粒子系统、动画工具以及精灵(Sprite)管理。在Sprite Kit中,SKAction类扮演着核心角色,它可以...

    精品源码 / 炫酷特效 / 动漫人物 / 3D旋转轮播

    首先,3D旋转轮播是一种动态展示技术,它将多张图片或元素围绕一个中心点以3D的方式排列,并通过用户交互(如点击或滑动)触发旋转展示。这种效果能够使页面看起来更加生动有趣,吸引用户的注意力,增加用户停留时间...

    笔记十快速建立基本界面 + Egret制作转盘效果

    3. 停止逻辑:为了模拟真实世界的物理效果,转盘需要在某个点停止。你可以随机生成一个停止角度,然后使用Tween的to方法,让转盘在一定时间内逐渐减速并停在这个角度。 4. 触摸事件:为了让用户能够触发转盘旋转,你...

    全国青少年软件编程(Scratch)等级考试试卷(一级)测试卷.docx

    * 中心点是 Scratch 角色的旋转中心,可以设置在角色之外。 * 角色围绕中心点旋转。 知识点2: Scratch 背景编辑 * 在 Scratch 中,可以使用绘图工具中的“橡皮擦”工具去除不需要的部分。 知识点3: Scratch ...

    手机PDA程序设计入门-Game API进阶

    本文将深入探讨Game API的进阶知识,聚焦于TiledLayer的使用以及Sprite的高级功能,包括绘图细节、图像旋转和碰撞检测等关键知识点。 #### TiledLayer的结构与应用 TiledLayer是一种由多个瓷砖(tiles)组成的图形...

    how-to-make-a-wheel-of-fortune-in-unity-the-easiest-way-master

    3. **图形与动画**:转盘的旋转效果可以通过Unity的Sprite Renderer或Mesh Renderer组件实现,结合Sprite或3D模型来展示转盘。你可以利用Unity的Animator组件创建一个平滑的旋转动画,通过关键帧设置转盘从初始位置...

    Director行为解释[文].pdf

    3. Fade In/Out(渐入/渐出):通过控制透明度,让角色逐渐显现或消失,适用于场景过渡或强调某个元素的出现。 4. Random Movement and Rotation(随机移动和旋转):角色将在设定的区域内随机移动和旋转,增加游戏...

    01 C语言课程设计_海底世界.doc

    * 坐标系:以屏幕中心为坐标原点(0, 0),X 坐标从左到右逐渐变大,Y 坐标从上到下逐渐变大,角度按顺时针方向从 0 到 360 度。 * 世界(World):精灵活动的空间。 二、事件处理 * 事件(Event):包括鼠标滑动...

    JME试题及答案 socket 多线程 高级UI

    正确选项为 **C**:一个Sprite的动画,默认动画帧序列为(0,1,2,3) - **解析**:在JME中,`Sprite`类通常用于处理动画,如果没有特殊设置,其默认动画帧序列是从0到最大帧序号按顺序播放。 #### 二、多项选择题知识...

    抽奖转盘实现

    Cocos2d-x提供了Sprite类用于显示图片,我们可以为每个奖品区域创建一个Sprite,并将它们围绕中心点排列,形成转盘的外观。利用SpriteBatchNode可以优化多个精灵的渲染效率,将它们打包到一起,减少绘制调用。 接着...

    flash+as3.0常用公式

    - **锚点缓动**:这是一种更复杂的缓动方式,适用于物体围绕某个固定点移动的情况。公式如下: ```as3 var dx:Number = sprite.x - fixedX; var dy:Number = sprite.y - fixedY; var angle:Number = Math.atan2...

    转盘类源码

    7. **随机停靠**:转盘停止时,通常需要随机停在某个奖品上。可以使用Math.random()函数生成随机角度,然后结合缓动函数确保平滑停止。 8. **嵌套组件**:如果转盘包含多个部分,如指针、奖品区域,它们可能是嵌套...

    Android andengine中直接加载多张小图片合成一张大图片生成动画精灵源码.zip

    2. **纹理区域(Texture Region)**:在纹理图集中,每个小图片被表示为一个纹理区域,它定义了大纹理中的某个部分。AndEngine中的`TextureRegion`类代表了这个概念,它包含了对纹理中特定矩形区域的引用。 3. **...

    js在线抽奖

    这种抽奖插件以转盘形式呈现,用户点击后,转盘会转动并最终停在某个奖项上,为用户提供一种直观且刺激的抽奖体验。 在JavaScript中实现这样的功能,主要涉及以下几个核心知识点: 1. **DOM操作**:为了在网页上...

    actionscript例子源码

    SpriteMovement.fla可能展示了如何创建和控制Sprite对象的移动,如通过键盘或鼠标进行平移、旋转等操作,理解舞台坐标系统和运动路径的设定。 3. 加载屏幕(LoadingScreen.fla) 在大型或资源密集型的Flash应用中,...

    新技术培训 培训讲义17_十二生肖伪3D圆运动课堂案例.doc

    通过调整这些函数参数,可以模拟物体围绕某个轴心旋转的效果,如同飞去来器的轨迹或3D武器的光影效果。理解并掌握这种算法,有助于开发者更深入地理解和创建具有3D效果的游戏动作。 二、核心技术点 1. **显示对象...

    iOS游戏应用源代码——rpetrich-AllowRotate-5b5097a.zip

    5. **Core Animation和 SpriteKit**:如果这是一个2D游戏,可能使用了Core Animation或者SpriteKit进行动画和游戏对象的管理。源代码中可能包含这两个框架的使用示例。 6. **Swift或Objective-C**:根据源代码的...

    Flash AS3动画效果公式

    该公式适用于实现物体围绕某个固定点做偏心运动的效果,`springLength`表示偏心距离。 4. **角度旋转公式**: ```as3 var dx: Number = mouseX - sprite.x; var dy: Number = mouseY - sprite.y; sprite....

Global site tag (gtag.js) - Google Analytics