gpt4 book ai didi

ios7 - SpriteKit 中的缩放和滚动

转载 作者:行者123 更新时间:2023-12-02 17:34:43 27 4
gpt4 key购买 nike

我是 SpriteKit 新手。我需要通过 UIImageView 或 SpriteNode 显示图像(它是游戏的背景图像)。但是,我需要用户能够放大背景并平移。我在不使用 SpriteKit 的情况下轻松完成了此任务,但无法弄清楚如何使节点接受缩放和平移。如果我在 Storyboard中使用 UIScrollView,则场景中添加的所有 Sprite 都不会成为子对象,也不会缩放或平移。

这可能吗?你能指出我正确的方向吗?

<小时/>

编辑:

我对你的回答有点困惑,但这就是我所做的:

在我的 Root View Controller .m中:

- (void)viewDidLoad
{
[super viewDidLoad];
SKView * showDesigner = (SKView *)self.view;
SKScene * scene = [iMarchMyScene sceneWithSize:showDesigner.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
[showDesigner presentScene:scene];
}

在我的场景中.m:(您的步骤已被注释)

-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {

//create SKView (step 1)
SKView *skview_field = [[SKView alloc]initWithFrame:(CGRectMake(0, 0, size.width, size.height))];

//create UIScrollView with same dimensions as your SpriteKit view (step 2)
UIScrollView* uiscrollview_field = [[UIScrollView alloc]initWithFrame:skview_field.frame];

//initialize the field (field is the game's background node)
SKSpriteNode *field = [SKSpriteNode spriteNodeWithImageNamed:@"Field"];
field.position = CGPointMake(CGRectGetMidX(self.frame), (CGRectGetMidY(self.frame)));
field.size = CGSizeMake(self.size.width, self.size.height / 3);

//create a UIView (called scrollViewContent) with dimensions of background node (step 3)
UIView* scrollViewContent = [[UIView alloc]initWithFrame:field.frame];

//set UIScrollView contentSize with same dimensions as your scrollViewContent and add a scrollContentview as your UISCrollView subview (step 4)
[uiscrollview_field setContentSize:(CGSizeMake(scrollViewContent.frame.size.width, scrollViewContent.frame.size.height))];
scrollViewContent.frame = field.frame;
[uiscrollview_field addSubview:scrollViewContent];



//[self addChild:field]; -- my original code
//.....does a bunch of other inits

return self;
}

这就是我迷路的地方:第 5 步:现在,在 Root View 中添加 SKView,并在 SKView 之上添加 UIScrollView。

如果我理解正确的话,我需要转到 myRootViewController.m 并在 viewDidLoad 方法中,将 SKView 和 UIScrollView (在 myScene.m 中初始化)添加为在 viewDidLoad 方法中初始化的 SKView 的 subview ?我不知道如何完成该部分。

最佳答案

这是我解决滚动问题的方法。它围绕着“窃取” UIScrollView 的行为。我从 2012 年关于将 UIKit 与 OpenGL 混合的 WWDC 视频中学到了这一点。

  1. 将 UIScrollViewDelegate 方法添加到 ViewController 并将 ScrollView 委托(delegate)设置到 ViewController
  2. 将 PanGestureRecognizer 从 UIScrollView 添加/移动到 SKView
  3. 使用scrollViewDidScroll回调方法来控制用户滚动时所需的任何节点

示例项目: https://github.com/bobmoff/ScrollKit

就像我在上面的评论中提到的那样,我在运行应用程序的时候大约有 30% 的时间遇到​​了一些微小的延迟。 FPS 仍然是 60,但似乎与委托(delegate)方法的调用频率存在一些轻微的冲突,因为有时感觉有点滞后。如果有人设法解决这个问题,我很想听听。似乎只有当我按住手指时,减速时才不会滞后。

关于ios7 - SpriteKit 中的缩放和滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19082251/

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