0

このコードを使用して作成されたスプライトである行があります

CGPoint diff = ccpSub(startLocation, endLocation);
float rads = atan2f( diff.y, diff.x);
float degs = -CC_RADIANS_TO_DEGREES(rads);
float dist = ccpDistance(endLocation, startLocation);
CCSprite *line = [CCSprite spriteWithFile:@"line.png"];
[line setAnchorPoint:ccp(0.0f, 0.5f)];
[line setPosition:endLocation];
[line setScaleX:dist / line.boundingBox.size.width];
[line setRotation: degs];

line.tag = 1;
[_lines addObject:line];
[self addChild:line];

衝突検出コードでは、次のコードを使用してCGRectを作成します。

        CGRect lineRect = CGRectMake(
        line.position.x - (line.contentSize.width/2), 
        line.position.y - (line.contentSize.height/2), 
        line.contentSize.width, 
        line.contentSize.height);

もちろん、線は角度を使って作られているので、これは誤りです。

長方形、正方形のスプライトをこの長方形と比較しようとしています。キャラクターが動いていて、プレイヤーが線を引くことができるという考え方です。キャラクターが線に当たると、反対方向に跳ね返ります。

角度、線の片側のx&y位置、線の長さがあります。ラインの反対側のもう一方のx&y位置を取得するにはどうすればよいですか?

皆さんが私を助けてくれることを願っています。

前もって感謝します!

4

2 に答える 2

0

CGRectApplyAffineTransformおそらく、、CGAffineTransformMakeRotationおよび場合によってはのドキュメントを調べる必要がありCGAffineTransformMakeTranslationます。

于 2012-06-27T16:02:15.610 に答える
0

私があなたを正しく理解しているかどうかを知るのは少し難しいですが、「...線の反対側のもう一方のx&y位置」と言うとき、私はあなたが線の反対側の端点の座標が何であるかを意味していると思います。

もしそうなら、私はあなたが探しているかもしれない実際の式は次のとおりだと思います:

  1. {x1、y1}=すでに持っている開始点
  2. {x2、y2]=探しているポイント

    • x2 = x1 +(距離* cosA)
    • y2 = y1 +(距離* sinA)

しかし、先に述べたように、これで必要なものが正確に得られるかどうかは少しわかりません。Line.pngのバウンディングボックスの反対側の頂点のポイントを実際に探している場合は、おそらくその式を使用できますが、度を90度変更して、x&yからオフセットされた座標を決定します。あなたが既に知っている。

とにかく、私は少なくともあなたを有益な方向に導くのに役立つことを願っています。

于 2012-06-28T05:36:45.980 に答える