如何在 SpriteKit 中呈现场景后立即接收触摸事件?
Posted
技术标签:
【中文标题】如何在 SpriteKit 中呈现场景后立即接收触摸事件?【英文标题】:How can I receive touch events immediately after presenting a scene in SpriteKit? 【发布时间】:2014-05-02 03:25:59 【问题描述】:使用 SpriteKit,我有一个场景 XYZMyScene
,当我触摸屏幕时会呈现另一个场景 XYZMyOtherScene
。在不抬起手指的情况下,我希望touchesMoved:withEvent:
在我移动手指时触发,但直到我首先抬起手指,然后触碰新场景并四处移动时它才会触发。
有没有可能在不先抬起手指的情况下让它开火?
下面是一些简单的复制代码:
// XYZMyScene.h
#import <SpriteKit/SpriteKit.h>
@interface XYZMyScene : SKScene
@end
// XYZMyScene.m
#import "XYZMyScene.h"
#import "XYZMyOtherScene.h"
@implementation XYZMyScene
-(id)initWithSize:(CGSize)size
if (self = [super initWithSize:size])
self.backgroundColor = [SKColor orangeColor];
return self;
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
XYZMyOtherScene *otherScene = [[XYZMyOtherScene alloc] initWithSize:self.frame.size];
[self.view presentScene:otherScene];
@end
// XYZMyOtherScene.h
#import <SpriteKit/SpriteKit.h>
@interface XYZMyOtherScene : SKScene
@end
// XYZMyOtherScene.m
#import "XYZMyOtherScene.h"
@implementation XYZMyOtherScene
-(id)initWithSize:(CGSize)size
if (self = [super initWithSize:size])
self.backgroundColor = [SKColor blueColor];
return self;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
NSLog(@"moving!");
@end
【问题讨论】:
我建议您将 XYZMyScene 的元素移动到 XYZMyOtherScene 并处理来自同一场景的所有内容。 @akashg - 我不知道。听起来有点像它反驳了我所学到的关于分工和 OOP 的一切。必须有更好的解决方案... 嗯,根据我对 XYZMyScene 的了解,它并没有真正起到什么作用。 【参考方案1】:您不能将触摸从一个班级转移到另一个班级。
在不知道您的代码或您执行此操作的最终意图的情况下,我的唯一建议是为您的 XYZMyOtherScene
类设置一个类属性,并让它传递您完成任务所需的任何数据。
【讨论】:
感谢您的建议。目前,我没有想要结转的数据。几乎,我希望在我的手指离开屏幕时显示一个场景,然后在我的手指在屏幕上时显示另一个场景。有没有办法强制XYZMyOtherScene
开始收听touchesMoved:withEvent
?如果是这样,也许我可以在其didMoveToView:
方法中调用它...以上是关于如何在 SpriteKit 中呈现场景后立即接收触摸事件?的主要内容,如果未能解决你的问题,请参考以下文章
Swift:如何获得Spritekit场景的大小以呈现SKNode全屏?