0

タップに CC3Node を追加したい。しかし、私が使用しているコードは奇妙なものを生成します。オブジェクトはタッチ位置に応じて配置されますが、第 3 象限に配置されます (画面が 4 分割されるように)

問題の例を次に示します。ここに画像の説明を入力

要約すると、白い四角の中央をクリックすると、象限の中央にハローワールドが配置されました。右上隅をクリックすると、紫色のハローワールドが重なっています。白い四角。

私が使用しているコードは次のとおりです。

CGSize winSz = [[CCDirector sharedDirector] winSizeInPixels];
    GLfloat aspect = winSz.width / winSz.height;

    // Express touchPoint X & Y as fractions of the window size
    GLfloat xtp = ((2.0 * touchPoint.x) / winSz.width) - 1;
    GLfloat ytp = ((2.0 * touchPoint.y) / winSz.height) - 1;

    // Get the tangent of half of the camera's field of view angle
    GLfloat effectiveFOV = ((ViewInterface*)[ViewInterface sharedViewInterface]).currentScene.activeCamera.fieldOfView / ((ViewInterface*)[ViewInterface sharedViewInterface]).currentScene.uniformScale;
    GLfloat halfFOV = effectiveFOV / 2.0;
    GLfloat tanHalfFOV = tanf(DegreesToRadians(halfFOV));

    // Get the distance from the camera to the projection plane
    GLfloat zCam = ((ViewInterface*)[ViewInterface sharedViewInterface]).currentScene.activeCamera.globalLocation.z;

    // Calc the X & Y coordinates on the Z = 0 plane using trig and similar triangles
    CC3Vector tp3D = cc3v(tanHalfFOV * xtp * aspect * zCam,
                          tanHalfFOV * ytp * zCam,
                          0.0f);

tp3D は、.location 属性を使用してノードに設定した最終的な座標です。

私のレイヤーはジェスチャーを受け取り、次のことを行います。

-(void) handleTapSelection: (UITapGestureRecognizer*) gesture {

    if ( [self cc3ValidateGesture: gesture] && (gesture.state == UIGestureRecognizerStateEnded) ) {
            CGPoint touchPoint = [self cc3ConvertUIPointToNodeSpace: gesture.location];
            [[StateInterface sharedStateInterface] tapDetected:gesture inView:nil locationInView:touchPoint];
            //[self.mashUpScene pickNodeFromTapAt: touchPoint];
        }
}

このメソッドを使用して最初に変換しない場合: cc3ConvertUIPointToNodeSpace、上下のタップが逆になります。

winSz で返される画面のサイズが実際に正しいサイズ (2048、1320) であることを確認しました。

また、tp3D の x と y は常に負で、これは奇妙です... コードはここから来ています: http://www.cocos2d-iphone.org/forum/topic/14790

4

1 に答える 1

1

CoCos3d DemoMash を見ましたか。cocos3d のすべての機能の説明とコードがあり、あなたがしようとしていることは既にそこに実装されています。

于 2013-03-24T17:28:45.507 に答える