0

我希望这个问题以前没有被问太多。当我搜索时,我只会收到与重新缩放到窗口大小有关的问题。

现在我的问题。我让一艘太空飞船向另一艘飞船发射光束。我希望光束显示一段时间,并希望它“架起”两艘船。换句话说,我希望梁在两艘船之间扩展其宽度。

我尝试使用 1 像素宽和高(并对齐左边缘)的点影片剪辑来做到这一点。我尝试使用以下代码调整它的大小:(目标是要开火的船,所有者是开火的船)

dist.vx = target.x - owner.x;
dist.vy = target.y - owner.y;
dist.dist = Math.sqrt(dist.vx*dist.vx + dist.vy*dist.vy);

width = dist.dist;

x = owner.x;
y = owner.y;
rotation = Math.atan2(target.y-y, target.x-x)*180/Math.PI;

这不能按预期工作,因为 1) dot 在另一个维度上也变得更大 - 我怎样才能“关闭”这种行为?和 2) 有时它似乎变得很宽 - 但仅限于某些角度......

关于解决高度/宽度缩放或以其他方式实现相同效果的任何建议?

(我是编码和闪存的新手。)谢谢!

4

1 回答 1

0

通过调整点的大小,您将拥有一个矩形......

您可以动态创建一个覆盖两艘船的精灵,然后移动到一艘船的命中点,然后线另一艘船……您根本不需要计算距离。您需要做的是小心放置精灵。这样您就可以通过简单的数学计算相对击球点。

假设您有 mc space contining mc ship1和 mc ship2,并且船上的生命值坐标命名为hxhy并且您将使用 sprite s,计算如下。

// calculate hit points relative to mc space
var s1HX:int = ship1.x + ship1.hx, 
    s1HY:int = ship1.y + ship1.hy,
    s2HX:int = ship2.x + ship2.hx,
    s2HY:int = ship2.y + ship2.hy,
// sprite relative moveTo lineTo coords will be these.
    mX: int, mY: int,
    lX: int, lY: int;

// top left of sprite will be minimum of the hit coords.   
s.x = (s1HX <= s2HX)? s1HX : s2HX;
s.y = (s1HY <= s2HY)? s1HY : s2HY;

// now we can get sprite relative moveTo lineTo coordinates:
mX = s1HX - s.x;  
mY = s1HY - s.y;
lX = s2HX - s.x;
lY = s2HY - s.y;

剩下的就是使用这些带有花哨的线条样式等的实现......

创建一个新的精灵:

var s:Sprite = new Sprite();

在 mc 空间中添加/删除它:

space.addChild(s); 
space.removeChild(s);

对于图形,使用 sprite 的图形对象。

s.graphics

要设置线条样式,您可以使用:

s.graphics.lineStyle(...) , 
s.graphics.lineBitmapStyle(...),
s.graphics.lineGradientStyle(...)

功能,请阅读使用手册。

设置线条样式以绘制线条后,使用:

s.graphics.moveTo(mX,mY);
s.graphics.lineTo(lX,lY);

对于脉动效果,您必须做一些更复杂的事情,例如使用补间类,您可以在此处阅读:http: //help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/transitions/Tween。 html

请注意:精灵不是复杂的魔法,它们就像 mc,但它们没有时间线等。

当宽度或高度以编程方式改变时,精灵会尝试缩放。所以不要触摸它们,moveTo lineTo 会自动设置精灵的大小......

于 2013-04-05T20:25:59.763 回答