spriteKit 笔记三 —— Drog 精灵
来源:互联网 发布:it工程师英文自我介绍 编辑:程序博客网 时间:2024/05/02 02:45
Sprite Kit 教程:如何拖放精灵
目标:
1.拖放精灵与触摸的基础知识
2.如何通过滚动触摸视图本身
3.如何保持坐标直接在你的脑袋
4.如何使用手势识别与雪碧套件更是很酷的效果!
Getting Started:
1.创建工程:在 ViewController.m 中 替换一下内容- (void)viewWillLayoutSubviews{ [super viewWillLayoutSubviews]; // Configure the view. SKView * skView = (SKView *)self.view; if (!skView.scene) { skView.showsFPS = YES; skView.showsNodeCount = YES; // Create and configure the scene. SKScene * scene = [MyScene sceneWithSize:skView.bounds.size]; scene.scaleMode = SKSceneScaleModeAspectFill; // Present the scene. [skView presentScene:scene]; }}
2. 在MyScene.m 中加入一下内容:
@interface MyScene () @property (nonatomic, strong) SKSpriteNode *background;@property (nonatomic, strong) SKSpriteNode *selectedNode; @end
3.您将使用此字符串后,以确定您的移动节点。
Now add the following line before the @interface part.
static NSString * const kAnimalNodeName = @"movable";4.初始化
- (id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { // 1) Loading the background _background = [SKSpriteNode spriteNodeWithImageNamed:@"blue-shooting-stars"]; [_background setName:@"background"]; [_background setAnchorPoint:CGPointZero]; [self addChild:_background]; // 2) Loading the images NSArray *imageNames = @[@"bird", @"cat", @"dog", @"turtle"]; for(int i = 0; i < [imageNames count]; ++i) { NSString *imageName = [imageNames objectAtIndex:i]; SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:imageName]; [sprite setName:kAnimalNodeName]; float offsetFraction = ((float)(i + 1)) / ([imageNames count] + 1); [sprite setPosition:CGPointMake(size.width * offsetFraction, size.height / 2)]; [_background addChild:sprite]; } } return self;}
1)LoadBackground
解释1:该方法的第一部分加载的背景图像的场景(蓝 - 拍摄stars.png)。需要注意的是它设置图像的锚点到图像的左下(0,0)。
解释2:在雪碧套件,当你设置一个节点的位置,你实际上是设置的节点的锚点。缺省情况下,定位点被设定为节点的正中心。然而,通过设置锚点到左下角,当你设置节点的位置,你现在在哪里设置的左下角。
解释3:该方法不设置背景的任何地方的位置,所以背景默认为位置(0,0)。因此,图像的左下角位于(0,0),因此图像(这是一个关于800分长)屏幕延伸关闭的权利。
2)Loading the Images
解释1:该方法的下一部分依次通过图像加载的列表。对于每一个图像的一个节点创建并放置在场景。节点沿屏幕的长度分布,有一个很好的初始布局。它也将名称设置为kAnimal节点名。
解释2:设置一个节点的名称避免了拿着引用到一个节点,如果你以后需要它的需要。在创建子画面之后它被添加到后台节点。
解释3:
背景设置完成下面 进行点击事件 :
这个方法是一个辅助方法,它是做了三种不同的事情。
1.它会询问你的场景(个体经营)因为这是对位的触摸位置的节点。
2.后它得到匹配的节点,所述方法检查节点是相同的先前选定的节点。在这种情况下,有什么可以做,并且该方法返回。如果你感动了一个新的节点,或者你没有碰过一个节点呢。节点应该运行“摆动”的动画,所以你可以看到你选择哪个节点。但在开始动画之前,你要从当前所选节点的所有运行操作和运行一个旋转角度:时间:动作在当前节点上。这可以确保只有一个节点是动画和某个节点到其原始,未旋转的状态,当选择另一个节点。
3.这个if语句检查该被选择节点是动画节点之一。您可以轻松地检查这与您在initWithSize设置name属性:方法。如果选择了动画节点,创建所选节点上的序列(重排/删除应用程序时,像一个在主屏幕上),该做的“摆动”动画动作和运行茨艾伦序列。正常情况下,操作运行了你创建它的持续时间。为了避免“晃动”的动画从它完成后可以将其作为被永远重复的动作停止。
现在solver函数degToRad添加到文件底部:
Moving Sprites and the Layer based on Touches移动精灵和图层的基础上润色
时间让这些动物移动!其基本思想是将实现touchesMoved:withEvent:,并计算出触摸有多少自上一次移动。如果动物被选中,将移动此动物通过的量。如果动物没有被选中,这将移动整个层代替,使得用户可以滚动层从左至右。之前你虽然添加任何代码,让我们花点时间来讨论如何滚动雪碧Kit中的一个节点。
首先采取看看下面的图片:
正如你所看到的,你已经设置了背景,使锚点(左下)为(0,0),其余扩展起飞的权利。黑色区域表示当前可见区域(窗口的大小)。
所以,如果你想要滚动图像100点的权利,你可以通过移动整个雪碧套件节点100点到左边,你可以在第二个图像看到。
你也想确保你没有滚动太远。例如,你不应该能够将层移动到右边,因为将有空白点。
现在,你在这样的背景信息武装起来,让我们看看是什么样子的代码!增加以下新的方法来你的文件的底部:
-(CGPoint)boundLayerPos:(CGPoint)newPos{
CGSize winSize =self.size;
CGPoint retval = newPos;
retval.x =MIN(retval.x,0);
retval.x =MAX(retval.x , -[_backgroundsize].width + winSize.width);
retval.y = [selfposition].y;
return retval;
}
-(void)panForTranslation:(CGPoint)translation{
CGPoint position = [_selectedNodeposition];
if ([[_selectedNodename] isEqualToString:kAnimalNodeName]) {
[_selectedNodesetPosition:CGPointMake(position.x + translation.x, position.y + translation.y)];
}else{
CGPoint newPos =CGPointMake(position.x + translation.x, position.y + translation.y);
[_backgroundsetPosition:[selfboundLayerPos:newPos]];
}
}
第一种方法boundLayerPos:用于确保你不要滚动层以外的背景图像的边界。你通过在你想移动的层,它会修改你传递什么样的,以确保你不滚动太远。
如果您有任何麻烦,了解什么是怎么回事,请上面的图片,并绘制在纸上。
下一个方法panForTranslation:如果首先检查所选节点是动物节点,并基于一个传入的翻译的位置。如果选择的节点是在背景层将其设置的也是立场,但呼吁boundLayerPos:确保你无法滚动到遥远的左侧或右侧。
方法二 判断
还有另一种方式来完成你雪碧套件触摸操作只是做了 - 使用手势识别器,而不是!
手势识别是一个伟大的方式来探测不同的手势像水龙头,双水龙头,刷卡或平底锅。
而不必写一堆疯狂的寻找代码来检测水龙头,双水龙头,刷卡,平底锅,或捏之间的差别基本上,您只需创建要检测什么手势识别对象,并将其添加到视图。然后,它会给你一个回调时发生!
他们是非常容易使用,你可以用它们与雪碧套件,没有烦恼。让我们来看看是如何工作的。
首先,注释掉触摸操控方式,的touchesBegan:withEvent:和touchesMoved:withEvent:因为您将使用不同的方法了。
- spriteKit 笔记三 —— Drog 精灵
- Direct3D学习笔记(三)——精灵变换(Srote_Scale)
- (原创)SpriteKit+Swift学习笔记(六)-生成大量精灵
- (原创)SpriteKit+Swift学习笔记(六)-生成大量精灵
- SpriteKit 学习笔记(一)
- SpriteKit 笔记整理(不全)
- SpriteKit学习笔记 - - - 物理系统
- Spritekit中如何判断触摸点击的精灵
- Spritekit游戏开发之SKSpriteNode(精灵)一
- Spritekit游戏开发之SKSpriteNode(精灵)二
- SpriteKit
- SpriteKit学习笔记(六)关于SpriteKit与cocos2d
- SpriteKit学习笔记(六)关于SpriteKit与cocos2d
- cocos2d-x学习笔记02——精灵贴图
- cocos2d-x学习笔记——创建精灵
- Cocos2d-x学习笔记《08》——精灵类Sprite
- Cocos2dx学习笔记(2)——精灵的创建
- Direct3D学习笔记(一)——精灵(Bomo_catcher游戏)
- 使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样
- 验证是否是正确手机号
- 跨网段的ping过程
- Android 小问题 集锦
- 关于创业
- spriteKit 笔记三 —— Drog 精灵
- 安全驾驶-高速路下坡路 (二十八)
- javac编译后出现乱码错误
- iOS 截屏并保存到相册
- 对activity的一些理解和用法的记录
- 安全驾驶-隧道 (二十九)
- 毕业设计--博客管理系统(一)
- 常用测试网络方法
- 2016.01.16工作小结