gpt4 book ai didi

ios - 将对象从 SKScene 传递到 UIViewController

转载 作者:行者123 更新时间:2023-11-29 12:40:00 26 4
gpt4 key购买 nike

我正在尝试将对象从 SKScene 传递到显示场景的当前 UIViewController,就像我创建了一个只会被触发的标签一旦场景中的对象到达特定位置,我知道我可以轻松创建一个 SKLabel 并在对象到达我想要的位置后将其添加到场景中,但我会而是以 ViewController 风格的方式来做,因为我将添加很多对象,这些对象将做与我的应用 Progress 相同的事情,这个原因放在一边,我实际上做了尝试添加一个 sk 标签以查看它是否会那样工作,是的,我能够看到 SKLabel 出现在到达让我们说 location.x = 50 的对象上,我设置对象到达location.x = 270时移除节点,但问题是只做了一次,再次添加对象后,场景似乎并没有移除节点即使我将我的对象指向 270..

顺便说一下,因为我提到了 2 个问题,这里是为 SKlabel 节点执行上述操作的代码,它只发生一次,我希望它执行一次语句,每次我击中那个位置

if (newLocation.x==270.00 )) {
[self addingTheLabel];
}

if (newLocation.x == 50.00) {
SKAction *removingTheNode = [SKAction removeFromParent];
[self.label runAction:removingTheNode];
}

最佳答案

没关系,现在能够解决问题..

对于那些可能遇到这种情况的人,在您的场景中创建一个协议(protocol)将解决这个问题:

@protocol gameSceneDelegate <NSObject>
-(void)testProtocol;
-(void)testProtocol2;

@end;
@interface MyScene : SKScene
@property (weak,nonatomic) id<gameSceneDelegate> delegate;

在场景的 View Controller 上实现它:

@interface ViewController : UIViewController<gameSceneDelegate>

在 ViewController.m 中,您需要首先将您的场景设置为您的委托(delegate):

MyScene *scenePointer = (MyScene*) scene;

[scenePointer setDelegate:self];

最后,在您的 ViewController 上实现这些方法:

-(void)testProtocol{
NSString *sampleString2 = [[NSString alloc]initWithFormat:@"This will show when testProtocol is selected"];
self.sampleLabel.text = sampleString2;

}

-(void)testProtocol2{
NSString *sampleString3 = [[NSString alloc]initWithFormat:@"This will show when test 2 protocol is selected"];
self.sampleLabel.text = sampleString2;
}

在您的 ViewDidLoad 中创建一个 if 语句,如果您的 scenePoint 是委托(delegate),则执行以下操作:

if([scenePointer delegate]){
[self testProtocol];
[self testProtocol2];

}

现在,转到您的场景,因为我想要的是每当 SpriteNode 到达特定位置时更改标签,我所做的是:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
for(UITouch *touch in touches){
CGPoint location = [touch locationInNode:self];
CGPoint newLocation = CGPointMake(location.x, 450);

if (newLocation.x == 270) {
//This will trigger the method everytime the spritenode hit's this location
if([_delegate respondsToSelector:@selector(testProtocol2)]){
[_delegate performSelector:@selector(testProtocol2)];
}

}


if(newLocation.x <= 220){
newLocation.x = 220;
//This will trigger the method everytime the spritenode hit's this location
if([_delegate respondsToSelector:@selector(testProtocol)]){
[_delegate performSelector:@selector(testProtocol)];

}

}
self.spriteNode.position = newLocation;
}

}

现在每次您的 SpriteNode 到达您想要的位置时,它都会更改标签。我希望这会帮助其他与此有相同概念的人。

关于ios - 将对象从 SKScene 传递到 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25228634/

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