- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
...嗯,到一个不完整的圈子。
我有一个看起来像这样的可拖动 slider :
蓝色条的实例名称为 track
粉色圆点的实例名称为 puck
.
我需要将冰球始终限制在蓝色区域内,这就是我的数学失败对我不利的地方!到目前为止,我让冰球沿 x 轴移动,如下所示:
private function init():void
{
zeroPoint = track.x + (track.width/2);
puck.x = zeroPoint-(puck.width/2);
puck.buttonMode = true;
puck.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
}
private function onMouseDown(evt:MouseEvent):void
{
this.stage.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
this.stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
}
private function onMouseUp(evt:MouseEvent):void
{
this.stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
}
private function onMouseMove(evt:MouseEvent):void
{
puck.x = mouseX-(puck.width/2);
//need to plot puck.y using trig magic...
}
private function getRadian():Number
{
var a:Number = mouseX - zeroPoint;
var b:Number = 50;
var c:Number = Math.sqrt((a^2)+(b^2));
return c;
}
最佳答案
如我所见,您解决的问题是在圆上找到最近的点。谷歌有很多关于这个主题的建议。
您可以通过首先检测鼠标位置和圆心之间的角度来优化它。为此使用 Math.atan2()。如果角度在间隙范围内,只需选择最近的端点:左或右。
编辑1 这是此策略的完整示例。
希望有帮助。
import flash.geom.Point;
import flash.events.Event;
import flash.display.Sprite;
var center:Point = new Point(200, 200);
var radius:uint = 100;
var degreesToRad:Number = Math.PI/180;
// gap angles. degrees are used here just for the sake of simplicity.
// what we use here are stage angles, not the trigonometric ones.
var gapFrom:Number = 45; // degrees
var gapTo:Number = 135; // degrees
// calculate endpoints only once
var endPointFrom:Point = new Point();
endPointFrom.x = center.x+Math.cos(gapFrom*degreesToRad)*radius;
endPointFrom.y = center.y+Math.sin(gapFrom*degreesToRad)*radius;
var endPointTo:Point = new Point();
endPointTo.x = center.x+Math.cos(gapTo*degreesToRad)*radius;
endPointTo.y = center.y+Math.sin(gapTo*degreesToRad)*radius;
// just some drawing
graphics.beginFill(0);
graphics.drawCircle(center.x, center.y, radius);
graphics.moveTo(center.x, center.y);
graphics.lineTo(endPointFrom.x, endPointFrom.y);
graphics.lineTo(endPointTo.x, endPointTo.y);
graphics.lineTo(center.x, center.y);
graphics.endFill();
// something to mark the closest point
var marker:Sprite = new Sprite();
marker.graphics.lineStyle(20, 0xFF0000);
marker.graphics.lineTo(0, 1);
addChild(marker);
var onEnterFrame:Function = function (event:Event) : void
{
// circle intersection goes here
var mx:int = stage.mouseX;
var my:int = stage.mouseY;
var angle:Number = Math.atan2(center.y-my, center.x-mx);
// NOTE: in flash rotation is increasing clockwise,
// while in trigonometry angles increase counter clockwise
// so we handle this difference
angle += Math.PI;
// calculate the stage angle in degrees
var clientAngle:Number = angle/Math.PI*180
// check if we are in a gap
if (clientAngle >= gapFrom && clientAngle <= gapTo) {
// we are in a gap, no sines or cosines needed
if (clientAngle-gapFrom < (gapTo-gapFrom)/2) {
marker.x = endPointFrom.x;
marker.y = endPointFrom.y;
} else {
marker.x = endPointTo.x;
marker.y = endPointTo.y;
}
// we are done here
return;
}
// we are not in a gp, calculate closest position on a circle
marker.x = center.x + Math.cos(angle)*radius;
marker.y = center.y + Math.sin(angle)*radius;
}
addEventListener(Event.ENTER_FRAME, onEnterFrame);
关于actionscript-3 - 将 MovieClip 拖动到一个圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6509716/
我在 animate cc 中将一些图像转换为 movieclips,图像是导出为 .png 的文本,它们宽度不同,高度相同。两者都在图书馆和舞台上,但在不同的位置和同一框架中,我需要在不同的情况下用
只是说我有一个包含电影剪辑 B1、B2、B3、B4、B5 的电影剪辑 A 我在 A 中编写代码以接收 a 包含的所有影片剪辑,并喜欢在那里打印名称。 我试过了,没有成功: for each (a:Mo
我正在尝试使用 Flash Builder 4.5 构建 MXML 应用程序,并且我正在集成一个 API,该 API 要求显示对象的根是 MovieClip。我个人认为这是糟糕的设计,但我必须接受它。
我想知道影片剪辑符号和图形符号之间的性能/内存使用是否有任何差异? 最佳答案 就在这里。 在这方面,Shape 将是最轻的可用 DisplayObject,因为您无法实例化 DisplayObject
MovieClip(mcName).play(); MovieClip(mcName).addEventListener(??????, myStopFunction); 或者您可以如何以不同的方式了
我需要在艺术家给我的 DisplayObject 中限制一个点。 我让它工作,但只适用于光标仍在 bounds 内的情况。 受限对象称为limited。 function onSqMouseMove(
我的库中有两个 MovieClip 符号,我希望它们共享同一个类,但 Flash 不允许我将同一个类分配给任何两个不同的 MC 符号,因此我创建了两个伪类来扩展我希望的类初步分享。 因此,由 2 个不
我有一个名为 Table 的类,它链接到舞台上的剪辑。 在设置过程中,我创建了许多 Table 实例,并为每个实例传递一个 TableData 类的实例。此 TableData 对象包括一个 ID 值
...嗯,到一个不完整的圈子。 我有一个看起来像这样的可拖动 slider : 蓝色条的实例名称为 track粉色圆点的实例名称为 puck . 我需要将冰球始终限制在蓝色区域内,这就是我的数学失败对
更改父 MovieClip 的宽度和高度不会改变内部 MovieClip 的宽度和高度。父影片剪辑放置在舞台上并手动调整大小。当我通过代码将父 MovieClip 的维度分配给内部 MovieClip
我想知道如何以编程方式将库中的 MovieClip 添加到舞台上。 我该怎么做呢? 最佳答案 Flash 中的符号可以定义 ActionScript 链接。 可以通过右键单击库中的符号并选择属性...
我的问题是:我有一个 MovieClip (obj),用户可以将其拖动到两侧进行导航,我为此使用的代码: import flash.events.MouseEvent; import flash.ge
我正在尝试导出一个合影动画,该动画在 Flash 中运行良好,但在 html5 Canvas 中导出时则不行。 技巧很“简单”:每张照片都是一个按钮,当您将鼠标滑到某人的照片上时,就会出现他的职位。
如您所知,在 as3 中我们有一个 getBounds() 方法,该方法返回我们想要的 DisplayObject 容器中影片剪辑的确切尺寸和坐标。事实上,这些数据是根据调用 getBounds()
我正在编写一些代码(我认为)需要顺序播放 MovieClip 对象。我希望能够将其保留在单个框架中并仅使用外部源文件。 我希望使用它的方式是在程序的各个部分之间切换。 删除当前的 child 构建影片
如您所知,在 as3 中我们有一个 getBounds() 方法,该方法返回我们想要的 DisplayObject 容器中影片剪辑的确切尺寸和坐标。事实上,这些数据是根据调用 getBounds()
我试图在从对象及其蒙版构造 MovieClip 对象后对其进行抗锯齿处理,这两个 MovieClip 都是通过 SWFLite 从 swf 加载的: var icon:MovieClip = Asse
我在我的舞台上导入了影片剪辑。但是这个电影片段有超出这个电影片段边界的对象,所以我在舞台上有一部分对象必须是不可见的,但它们不是不可见的。 播放器中的My MovieClip(播放器剪掉部分图片) 我
我必须将 MovieClip 转换为 ByteArray 并使用 POST 方法将其发送到 php。处理php的人说只需要发送ByteArray,并且可以从PHP端转换为JPG和PNG。当我构建在本地
我有一个 xml 文档,我想用它在我的 .fla 中显示 MovieClips: TestClip 在我的 .fla 中,我创建了一个名为 TestClip 的符号并选择 Linkage > Expo
我是一名优秀的程序员,十分优秀!