タップに 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