Objective c 定义触摸区域-目标-c

Objective c 定义触摸区域-目标-c,objective-c,touch,touchesbegan,Objective C,Touch,Touchesbegan,我在stackoverflow中找到了巧妙的解决方案。不幸的是,这段代码在我的项目中不起作用。我试着在四个不同的触摸区域划分一个圆形的SKSpriteNode。我还想更改该区域的颜色(仅当按下该区域时)。你知道怎么做吗 例如,我非常感谢你的帮助 我的代码: - (void)setUpDPad { _dPad = [SKSpriteNode spriteNodeWithImageNamed:@"dpad"]; _dPad.anchorPoint = CGPointMake(0.

我在stackoverflow中找到了巧妙的解决方案。不幸的是,这段代码在我的项目中不起作用。我试着在四个不同的触摸区域划分一个圆形的SKSpriteNode。我还想更改该区域的颜色(仅当按下该区域时)。你知道怎么做吗

例如,我非常感谢你的帮助

我的代码:

- (void)setUpDPad {  
    _dPad = [SKSpriteNode spriteNodeWithImageNamed:@"dpad"];
    _dPad.anchorPoint = CGPointMake(0.0, 0.0);
    _dPad.position = CGPointMake(0.0-self.frame.size.width/2+5, 0.0-self.frame.size.height/2+50);
    _dPad.zPosition = 1;
    [self addChild:_dPad];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    for (UITouch *touch in touches) {

        CGPoint location = [touch locationInNode:self];
        CGFloat angle = [self angleToPoint:location];
        int area = [self sectionForAngle:angle];

        if ([_dPad containsPoint:location]) {
            if (area == 1) {

            }
            if (area == 2) {

            }
            if (area == 3) {

            }
            if (area == 4) {

            }
       }
    }
}

- (float)angleToPoint:(CGPoint)tapPoint {

    int x = _dPad.frame.size.width/2;
    int y = _dPad.frame.size.height/2;
    float dx = tapPoint.x - x;
    float dy = tapPoint.y - y;
    CGFloat radians = atan2(dy,dx);
    CGFloat degrees = radians * 180 / M_PI;

    if (degrees < 0) return fabs(degrees);
    else return 360 - degrees;
}

- (int)sectionForAngle:(float)angle {

    if (angle >= 45 && angle < 135) {
        return 1;
    }
    else if (angle >= 135 && angle < 225) {
        return 2;
    }
    else if (angle >= 225 && angle < 315) {
        return 3;
    }
    else {
        return 4;
    }
}
-(void)setUpDPad{
_dPad=[SKSpriteNode SPRITENODEWITHIMAGENAME:@“dPad”];
_dPad.anchorPoint=CGPointMake(0.0,0.0);
_dPad.position=CGPointMake(0.0-self.frame.size.width/2+5,0.0-self.frame.size.height/2+50);
_dPad.zPosition=1;
[self addChild:_dPad];
}
-(无效)触摸开始:(NSSet*)触摸事件:(UIEvent*)事件{
用于(UITouch*触摸屏){
CGPoint位置=[触摸位置Innode:self];
CGFloat角度=[自身角度点:位置];
int area=[自剖角度:角度];
if([[u dPad containsPoint:location]){
如果(面积=1){
}
如果(面积=2){
}
如果(面积=3){
}
如果(面积=4){
}
}
}
}
-(浮动)角度点:(CGPoint)tapPoint{
int x=_dPad.frame.size.width/2;
int y=_dPad.frame.size.height/2;
float dx=tapPoint.x-x;
float dy=tapPoint.y-y;
CGFloat弧度=atan2(dy,dx);
CGFloat度=弧度*180/M_π;
如果(度<0)返回fabs(度);
否则返回360度;
}
-(int)角的截面:(浮动)角{
如果(角度>=45和角度<135){
返回1;
}
否则,如果(角度>=135和角度<225){
返回2;
}
否则如果(角度>=225和角度<315){
返回3;
}
否则{
返回4;
}
}

您是否尝试过调试您的问题,或者您是否希望其他人为您完成工作?@Avi我不知道代码的问题出在哪里。我尝试了很多东西,但都不起作用。这就是为什么我要问总统。也许有人能帮我。