Hey*_*ara 7 isometric sprite-kit
我正在努力在简单的等距Sprite Kit游戏中实现点击处理.
我有一个游戏场景(SKScene)和一个包含多个Tile对象(SKSpriteNode)的Map(SKNode).
以下是地图的屏幕截图:

我希望能够检测到用户点击的磁贴,所以我在Tile对象上实现了mouseDown.这是我在Tile.m中的mouseDown:
-(void)mouseDown:(NSEvent *)theEvent
{
[self setColorBlendFactor:0.5];
}
Run Code Online (Sandbox Code Playgroud)
代码似乎工作正常,但有一个小问题:节点重叠,并在节点的透明部分检测到click事件.示例(已添加rects以仅说明问题.它们未在逻辑中使用):

如您所见,如果我点击图块7的左上角,则图块8变为透明.

我尝试了在点击位置获取所有节点并检查点击是否在CGPath内部而没有成功(我认为坐标有问题).
所以我的问题是如何检测纹理上的点击而不是透明部分?或者我的方法可能是错的?
任何意见,将不胜感激.
小智 2
我“现在”对此类问题的解决方案是:
在您的场景中获取位于您单击的位置的所有节点,即
[myScene nodesAtPoint:[theEvent lactionInNode:myScene]]
Run Code Online (Sandbox Code Playgroud)不要忘记检查您是否没有单击场景的根目录,如下所示:
if (![[myScene nodeAtPoint:[theEvent locationInNode:myScene]].name isEqual: @"MyScene"])
Run Code Online (Sandbox Code Playgroud)
然后遍历可能的节点数组并检查该节点的 alphaTexture (NOT myNode.alpha)
要获得阿尔法,请尝试此操作。
我的看起来像这样:
-(void)mouseDown:(NSEvent *)theEvent {
/* Called when a mouse click occurs */
if (![[self nodeAtPoint:[theEvent locationInNode:self]].name isEqual: self.name]]) {
/* find the node you clicked */
NSArray *clickedNodes = [self nodesAtPoint:[theEvent locationInNode:self]];
SKNode *clickedNode = [self childNodeWithName:[clickedNodes getClickedCellNode]];
clickedNodes = nil;
/* call the mouseDown method of your Node you clicked to to node specific actions */
if(clickedNode) {
[clickedNode mouseDown:theEvent];
}
/* kill the pointer to your clicked node */
clickedNode = nil;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1705 次 |
| 最近记录: |