gpt4 book ai didi

iOS 如何在 Sprite Kit 中实现 UIButton 的节点行为?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:37:50 26 4
gpt4 key购买 nike

我希望我的一些 Sprite Kit 节点表现得像 UIButtons。我尝试了两种方法:

1) 使用 touchesBegan: - 如果用户小心,这会起作用,但似乎触发了多次,比我禁用交互的速度更快,导致按钮可以被多次激活:

   spriteNode.userInteractionEnabled = YES;

//causes the following to fire when node receives touch
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

self.userInteractionEnabled = NO;

DLog(@"Do node action");
self.userInteractionEnabled = YES;


}

2)我切换到Kobold-Kit作为 iOS Sprite Kit 之上的一层。它允许我做的一件事是添加 button - like behavior到任何节点。但是,我遇到了一个问题,如果我有 2 个按钮堆叠在一起,点击顶部按钮会同时激活这两个按钮。在这种情况下, bool 标志可以防止重复交互。我在 KKScene 中跟踪了堆叠按钮一起触发到此调用的问题:

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];

for (id observer in _inputObservers)
{
if ([observer respondsToSelector:@selector(touchesBegan:withEvent:)])
{
[observer touchesBegan:touches withEvent:event];
}
}
}

场景只是向场景中的所有节点发送通知。这会导致堆叠在一起的按钮行为一起触发。

有没有一种方法或示例可以说明如何正确安排 sprite 节点以允许类似于 UIButton 的行为,其中我只能激活顶部按钮,并且每次激活都会短暂禁用该按钮之后的时间?

最佳答案

@property (nonatomic, strong) UITapGestureRecognizer *tapGesture;

self.tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureStateChanged:)];
self.tapGesture.delegate = self;
[self.view addGestureRecognizer:self.tapGesture];


- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if (gestureRecognizer == self.tapGesture) {
return CGRectContainsPoint(self.neededSprite.frame, [self convertPoint:[sender locationInView:self.view] toNode:self]);
}
return YES;
}



- (void)tapGestureStateChanged:(UITapGestureRecognizer *)sender
{
if (sender.state == UIGestureRecognizerStateRecognized) {
/* do stuff here */
}
}

关于iOS 如何在 Sprite Kit 中实现 UIButton 的节点行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20640412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com