うまくいけば、これらの提案が役立ちます::
次に、あなたがこの2行の交点を見つける必要があるだろう、式はここで見つけることができます
- 表示オブジェクトに対してlocalToGlobal()関数を使用すると、その表示コンテナ内の回転、平行移動、および拡大縮小された点をステージに戻すことができます。例、$ p:Point = myMovieClip.localToGlobal(新しいPoint(10、10));
- Matrixは、ポイントを回転させるのに便利な方法です。例、var $ mtx:Matrix = new Matrix(); $ mtx.tx = 10; $ mtx.ty = 10; $ mtx.rotate();そして今$ mtx.txと$ mtx.ty回転した結果を持って
は、これらは、おそらくあなたの質問に答えていますが、私は念のためにそれらを言及したいと私はより複雑なものに入る前に考え出しました。 wvxvwのように、他の変数がなければ、あなたがしようとしている方程式を実際に解くことはできません。うまくいけば、これはあなたの特定の問題を解決する方法についていくつかの洞察を与えるだろう
import flash.display.Shape;
import flash.geom.Point;
import flash.display.Graphics;
import flash.events.MouseEvent;
var $s:Shape = new Shape();
addChild($s);
var borderStart:Point = new Point(stage.stageWidth/2, stage.stageHeight/2);
var borderRotation:Number = 45;
var borderLength:Number = 800;
var borderRad:Number = borderRotation * (Math.PI/180);
var borderEnd:Point = new Point(borderStart.x + Math.cos(borderRad) * borderLength, borderStart.y + Math.sin(borderRad) * borderLength);
stage.addEventListener(MouseEvent.MOUSE_MOVE, update);
function update(e:MouseEvent):void{
var $g:Graphics = $s.graphics;
$g.clear();
//Drawing the rotated border
$g.lineStyle(3, 0xff0000, .5);
$g.moveTo(borderStart.x, borderStart.y);
$g.lineTo(borderEnd.x, borderEnd.y);
//Finding if and where mouseX collides with our border
if (stage.mouseX >= Math.min(borderStart.x, borderEnd.x) && stage.mouseX <= Math.max(borderStart.x, borderEnd.x)){
var $x:Number = stage.mouseX;
//SOLVING HERE : Solve collision with X
var $percent:Number = ($x - borderStart.x)/(borderLength * Math.cos(borderRad));
var $y:Number = borderStart.y + Math.sin(borderRad) * borderLength * $percent;
//Drawing to our collision
$g.lineStyle(1, 0xffff00, .6);
$g.moveTo($x, 0);
$g.lineTo($x, $y);
$g.lineStyle(2, 0xffff00, 1);
$g.drawCircle($x, $y, 3);
trace("----\nCollision @\t" + "x: " + $x + "\ty:" + Math.round($y));
}
}
:私は線分でポイントにXを比較する際にYを検索する方法を示し、いくつかのコードを書きました。