我希望以前没有问太多。当我搜索时,我只会收到有关重新缩放到窗口大小的问题。
现在我的问题。我有一艘太空船向另一艘船射击。我希望光束显示一段时间,我希望它“桥接”两艘船。换句话说,我希望光束在两艘船之间延伸其宽度。
我尝试使用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)有时它似乎走得很远 - 但只是在某些角度......
有关解决高度/宽度缩放或其他方式达到相同效果的任何建议吗?
(我是编码和闪存的新手。)谢谢!
答案 0 :(得分:0)
通过调整点的大小,您将拥有一个矩形......
你可以动态创建一个精灵,覆盖两艘船, moveTo 一艘船的生命值,然后 lineTo 另一艘船...你根本不需要距离计算。你要做的就是小心精灵的位置。这样你就可以通过简单的数学计算相对的击球点数。
假设你有mc 空间连接mc ship1 和mc ship2 ,并且船上的点击坐标命名为 hx , hy ,你将使用精灵 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);
对于图形使用精灵的图形对象。
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自动设置精灵的大小......