Tag: sprite kit

用spritekit和UITouch绘制直线会创build多行

应该很简单。 我试图用UITouch和Spritekit绘制一条直线。 但是,当touchesmoved被调用时,它会创build多行而不是一行。 使用的代码如下: -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; positionInScene1 = [touch locationInNode:self]; pathToDraw = CGPathCreateMutable(); selectorLine = [SKShapeNode node]; selectorLine.strokeColor = [SKColor greenColor]; selectorLine.lineWidth = 5; [self addChild:selectorLine]; } -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { pathToDraw2 = CGPathCreateMutable(); UITouch* touch = [touches anyObject]; positionInScene2 = [touch locationInNode:self]; CGPathMoveToPoint(pathToDraw2, NULL, positionInScene1.x, […]

iAd旗帜unpauses精灵游戏

我正在开发一个iOS游戏,使用带有iAd横幅的精灵套件,而这个iAd引起了游戏的解封,而且通过取消暂停,我的意思是说SKA正在继续,下面是一些细节: 1)我有几个对象在我的游戏中有一个序列(串联不平行)的SKActions。 2)点击游戏屏幕上的“暂停游戏”button,然后“恢复”就可以正常工作了 – 所有事情都会根据需要暂停。 下面“注意”中的NSLog语句不显示。 3)我编写了以下通知,其中有一个观察者调用select器来暂停游戏(正确调用)。 下面“注意”中的NSLog语句不显示。 -(BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave [[NSNotificationCenter defaultCenter] postNotificationName:@"iAdsoPauseGame" object:self]; return YES; } 4)iAd出现lalala …一切都暂停,因为它应该是。 下面“注意”中的NSLog语句不显示。 5)当我点击iAd中的“x”时,按以下顺序出现:a)我在游戏中的对象正在运行时SKAction通过去iAd完成而“暂停”游戏,NSLog语句(在下面的注)被列出。 b)大约0.5秒后,我的ViewController的“viewDidAppear”被称为c)在5b之后小于1ms,我的iAd的“bannerViewActionDidFinish”被调用(我在这里有一个通知告诉我的游戏暂停…问题是这个0.5秒closuresiAd和这个方法被称为…之间的停机时间) 注意:在我的游戏的主要.m文件中,在“更新”方法(每帧调用)中,我有一个NSLog语句(下面),只要点击iAd中的“x”停止(当5b / 5c被调用时)。 if (NodeGamePlay.paused==FALSE) { NSLog(@"NodeGamePlay.paused==FALSE"); } 所以我的问题:当我退出iAd时,如何防止SKaction继续(步骤发生在5a)? 感谢您的时间和帮助 – 这一直困扰着我相当一段时间!

如何给skView添加一个手势?

我需要在游戏中添加几个滑动手势。 从我所知道的,这只能以编程的方式完成,不幸的是我从来没有用这种方式添加手势,我一直使用IB。 我知道我需要初始化一个手势识别器,使用initWithTarget:action:我知道如何设置它的属性,我不知道如何使这个手势做的东西。 我认为这是通过行动参数@select器,但似乎永远不会被调用。 我做错了吗? 这是我所拥有的: UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(animateSwipeRightLeft)]; [self.view addGestureRecognizer:swipeRight]; 并为select器我有: -(void)animateSwipeRightLeft { //do stuff… } 所以这涉及到一些相关的问题:我正确地设置了这一点? 如果是这样,为什么我的select器不被调用? 如果我不能用IB来做这件事,怎么办? 另外,如果有帮助,我的手势在我的场景的initWithSize方法中设置。

SpriteKit:didBeginContact在iPad上被称为不间断

我有一个使用SpriteKit的非常简单的项目,在这个项目中,一个怪物被丢弃并穿过一个平台。 在iPhone上,当怪物碰到平台时,didBeginContact会被调用一次。 但是,在iPad上,随着怪物在平台上滑动,该方法每秒被调用一次。 为什么在iPhone上的罚款,但在iPad上的错误? 我已经在模拟器和实际的iPad上进行了testing。 这是我设置类别的地方 static const uint32_t playerCategory = 0x1 << 0; static const uint32_t bulletCategory = 0x1 << 1; static const uint32_t monsterCategory = 0x1 << 2; static const uint32_t platformCategory = 0x1 << 3; static const uint32_t worldCategory = 0x1 << 4; 这里是怪物的设置 enemy.physicsBody.dynamic = YES; enemy.physicsBody.affectedByGravity = YES; enemy.physicsBody.allowsRotation = […]

iAd冻结了Sprite Kit应用程序

我发现点击iAds可以冻结任何Sprite Kit游戏的屏幕。 这不只是我的具体项目,因为股票的Sprite Kit示例项目也冻结与iAd。 尽pipe这在模拟器中不会发生! 我不能决定是否是因为模拟器运行iOS 8,而我的实际testing设备是7.1,或者是因为模拟器只是一个模拟器,所以它做的事情不同。 所以,如果你点击iAd,然后点击iAd中的链接去Safari浏览器(或者手动切换到任何应用程序),然后切换回Sprite Kit应用程序,应用程序被冻结。 iAd横幅广告仍处于运行状态,它会根据广告的预期方式加载广告。 但其他应用程序被冻结。 或者具体来说,它仍然接受触摸和东西(我可以从NSLog看到),但节点的渲染被冻结。 如果你点击它再次打开iAd,并closuresiAd,那么应用程序会以某种方式恢复,并且再次正常工作。 如果您好奇,这里是我对股票Sprite Kit示例项目所作的唯一修改: // in GameViewController.h #import <iAd/iAd.h> @interface GameViewController : UIViewController <ADBannerViewDelegate> @end // in GameViewController.m @interface GameViewController() { ADBannerView* iAdBanner; NSLayoutConstraint* centerAd; } @end @implementation GameViewController – (void)viewDidLoad { [super viewDidLoad]; // Configure iAd iAdBanner = [[ADBannerView alloc] initWithFrame:CGRectZero]; iAdBanner.alpha = […]

如何用Sprite Kit在2D游戏中模拟Z轴的重力

我正在用iOS 7上的Sprite工具包编写2D球赛,目前正在努力进行一次物理模拟。 为了解释预期的行为:如果一个球落入一个茶杯,它会绕圈,放松速度,最后静止在杯子的中心。 我试着用重力来归档,但是精灵套件中的重力只适用于垂直的X轴和Y轴,而不是Z轴。 我也尝试通过在开始接触时根据茶杯中的当前球位置切换重力值与小物理体来使用水平重力。 但是一些联系人被丢弃,结果很遥远,看起来很现实。 我想我需要在更新方法中解决这个问题,但是我不知道要走哪条路。 任何build议非常欢迎,我需要提及的是,我不是math专家,请解释你的路要走。 🙂

将所有SKSpriteNode子项合并成一个SKSpriteNode

我怎样才能把一个SKSpriteNode和它的所有子SKSpriteNode并合并到一个没有子节点的单个平坦的SKSpriteNode? 谢谢。

applyForce不顺畅

希望有人能帮助。 我一直在这一个拉我的头发! 下面是我的Sprite Kit游戏中的一些控制板代码,它使用applyForce来移动英雄船。 我喜欢控制和运动的感觉,它有一些漂亮的漂移等等。但是我对它产生的animation/运动有不一致的结果。 有时(大约一半的时间)animation是非常顺利,看起来是正确的。 剩下的时间,船只animation以不同的强度结尾。 游戏中的怪兽和皮卡在SKAction各种path上SKAction 。 当英雄船发生问题时,他们的animation不会受到影响,我通常会在debugging中看到它以每秒60.0 fps的速度发生,这使我认为这不是一个帧丢失问题。 我的记忆使用是一致的,我没有看到任何大的峰值。 当这个错误发生的时候,从现场开始总是很明显的(在我开始平稳的运动之后,它就不会发生了 – 让我想起它的初始力量或者多重力量),并且一直持续到我重新开始等级或暂停和不停止游戏,在这一点上,我得到了一个完美的stream畅的animation或毛刺的animation的新行为。 我的绘图和节点都是使用地图集和预加载进行优化的,甚至当我将游戏中的大部分内容都closures(除了船和控制台之外的所有东西),我仍然在船上遇到了这个问题。 我注意到,当我插入Xcode时经常遇到这种情况,通常是在logging时(但不是总是),特别是在运行仪器时。 我的ControlPad用一个委托回到游戏场景 /* Game Scene */ @interface GameScene () <SKPhysicsContactDelegate, ControlPadDelegate> … – (void)createHero { self.heroShip = [Hero createHeroInFrame:self.frame]; [self.gameObject addChild:self.heroShip]; self.heroShip.position = CGPointMake(self.heroShip.size.width, self.frame.size.height / 2); } // Move Hero By X And Y – (void)moveHeroByX:(float)moveByX andY:(float)moveByY { […]

重新加载SKScene或View以在In App Purchase后删除iAd

在“应用内购买”后,我已经成功从我的Sprite Kit游戏中移除了iAds,但问题是应用程序需要重新启动才能停止展示广告。 这使我相信,视图或场景需要刷新/重新加载(我已经尝试了很多方法),让iAds在In App Purchase之后消失。 In App Purchase是在一个名为PurchasedViewController的单独的类中进行的,我以模态方式呈现。 目前,我试图在购买已经回到根视图控制器后发送通知。 这是我的代码: ViewController.m #import "ViewController.h" #import "Intro.h" #import "PurchasedViewController.h" #import <iAd/iAd.h> #import "InAppManager.h" @implementation ViewController – (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reload) name:@"reloadIntro" object:nil]; // Configure the view. SKView * skView = (SKView *)self.view; // Create and configure the scene. SKScene *scene = [Intro sceneWithSize:skView.bounds.size]; […]

iAD视图冻结广告closures

好吧,所以在模拟器上testing后,事实certificate,这个问题只发生在实际的设备上 …我将如何解决这个问题? 我正在使用SpriteKit制作iOS应用程序,并正在实施iAD。 除了一件事之外,一切都或多或less地像我所期望的那样。 当我点击广告时,就像预期的那样,我把广告带到了一个全屏广告,但是当我closures那个广告时,当前视图冻结了,因为在视觉上什么也没有发生。 我知道该应用程序仍在运行,因为当我再次点击横幅广告并再次closures时,游戏恢复正常,游戏在视觉上冻结时进展。 这是如何在我的视图控制器类(iAD委托)初始化横幅: self.canDisplayBannerAds = YES; CGRect bannerFrame = CGRectMake(0, 20, scene.size.width, 50); banner = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner]; banner.delegate = self; banner.frame = bannerFrame; [banner setAlpha:0]; [self.view addSubview:banner]; 这些也是视图控制器类中的加载方法: – (void) bannerViewDidLoadAd:(ADBannerView *) bannerM { NSLog(@"Ad Loaded"); [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:1]; [bannerM setAlpha:1]; [UIView commitAnimations]; } – (void) bannerView:(ADBannerView *)bannerM […]