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"的图像文件。这个文件很可能与著名的MNIST数据集有关,MNIST是一个广泛用于计算机视觉领域,特别是手写数字识别的基准...
这通常通过比较帽节点和基座节点的中心点来实现。偏移量可以是二维向量,表示了在x轴和y轴上的移动比例。 4. **物理模拟**: SpriteKit提供了内置的物理世界,但HSKJoystick的摇杆通常不需要物理模拟。然而,...
Sprite Kit是Apple为iOS和OS X开发2D游戏而设计的一个强大图形引擎。它提供了一个完整的游戏开发环境,包括物理引擎、粒子系统、动画工具以及精灵(Sprite)管理。在Sprite Kit中,SKAction类扮演着核心角色,它可以...
首先,3D旋转轮播是一种动态展示技术,它将多张图片或元素围绕一个中心点以3D的方式排列,并通过用户交互(如点击或滑动)触发旋转展示。这种效果能够使页面看起来更加生动有趣,吸引用户的注意力,增加用户停留时间...
* 中心点是 Scratch 角色的旋转中心,可以设置在角色之外。 * 角色围绕中心点旋转。 知识点2: Scratch 背景编辑 * 在 Scratch 中,可以使用绘图工具中的“橡皮擦”工具去除不需要的部分。 知识点3: Scratch ...
本文将深入探讨Game API的进阶知识,聚焦于TiledLayer的使用以及Sprite的高级功能,包括绘图细节、图像旋转和碰撞检测等关键知识点。 #### TiledLayer的结构与应用 TiledLayer是一种由多个瓷砖(tiles)组成的图形...
3. **图形与动画**:转盘的旋转效果可以通过Unity的Sprite Renderer或Mesh Renderer组件实现,结合Sprite或3D模型来展示转盘。你可以利用Unity的Animator组件创建一个平滑的旋转动画,通过关键帧设置转盘从初始位置...
3. Fade In/Out(渐入/渐出):通过控制透明度,让角色逐渐显现或消失,适用于场景过渡或强调某个元素的出现。 4. Random Movement and Rotation(随机移动和旋转):角色将在设定的区域内随机移动和旋转,增加游戏...
3. 停止逻辑:为了模拟真实世界的物理效果,转盘需要在某个点停止。你可以随机生成一个停止角度,然后使用Tween的to方法,让转盘在一定时间内逐渐减速并停在这个角度。 4. 触摸事件:为了让用户能够触发转盘旋转,你...
* 坐标系:以屏幕中心为坐标原点(0, 0),X 坐标从左到右逐渐变大,Y 坐标从上到下逐渐变大,角度按顺时针方向从 0 到 360 度。 * 世界(World):精灵活动的空间。 二、事件处理 * 事件(Event):包括鼠标滑动...
正确选项为 **C**:一个Sprite的动画,默认动画帧序列为(0,1,2,3) - **解析**:在JME中,`Sprite`类通常用于处理动画,如果没有特殊设置,其默认动画帧序列是从0到最大帧序号按顺序播放。 #### 二、多项选择题知识...
Cocos2d-x提供了Sprite类用于显示图片,我们可以为每个奖品区域创建一个Sprite,并将它们围绕中心点排列,形成转盘的外观。利用SpriteBatchNode可以优化多个精灵的渲染效率,将它们打包到一起,减少绘制调用。 接着...
- **锚点缓动**:这是一种更复杂的缓动方式,适用于物体围绕某个固定点移动的情况。公式如下: ```as3 var dx:Number = sprite.x - fixedX; var dy:Number = sprite.y - fixedY; var angle:Number = Math.atan2...
7. **随机停靠**:转盘停止时,通常需要随机停在某个奖品上。可以使用Math.random()函数生成随机角度,然后结合缓动函数确保平滑停止。 8. **嵌套组件**:如果转盘包含多个部分,如指针、奖品区域,它们可能是嵌套...
这里的“飞线”可能指的是在地图上显示从一个点到另一个点的连线,比如国家间的航线或通信线路,以视觉方式突出显示数据或关系。 **描述解析:** 描述简洁明了,与标题一致,强调了这个实例的两个主要特性:国家...
2. **纹理区域(Texture Region)**:在纹理图集中,每个小图片被表示为一个纹理区域,它定义了大纹理中的某个部分。AndEngine中的`TextureRegion`类代表了这个概念,它包含了对纹理中特定矩形区域的引用。 3. **...
这种抽奖插件以转盘形式呈现,用户点击后,转盘会转动并最终停在某个奖项上,为用户提供一种直观且刺激的抽奖体验。 在JavaScript中实现这样的功能,主要涉及以下几个核心知识点: 1. **DOM操作**:为了在网页上...
SpriteMovement.fla可能展示了如何创建和控制Sprite对象的移动,如通过键盘或鼠标进行平移、旋转等操作,理解舞台坐标系统和运动路径的设定。 3. 加载屏幕(LoadingScreen.fla) 在大型或资源密集型的Flash应用中,...
通过调整这些函数参数,可以模拟物体围绕某个轴心旋转的效果,如同飞去来器的轨迹或3D武器的光影效果。理解并掌握这种算法,有助于开发者更深入地理解和创建具有3D效果的游戏动作。 二、核心技术点 1. **显示对象...
5. **Core Animation和 SpriteKit**:如果这是一个2D游戏,可能使用了Core Animation或者SpriteKit进行动画和游戏对象的管理。源代码中可能包含这两个框架的使用示例。 6. **Swift或Objective-C**:根据源代码的...