首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从plist旋转sprite节点

从plist旋转sprite节点
EN

Stack Overflow用户
提问于 2015-07-19 04:13:07
回答 1查看 81关注 0票数 1

我是Spritekit的新手,我正在创建一个游戏,我想让我的sprite节点在用户触摸它们时旋转。因为游戏有很多关卡,而且精灵节点都会以不同的角度旋转,所以我想把各个浮点值放在一个plist文件中,让节点在用户触摸时读取它们的角度旋转。

我知道,理想情况下,为了有效地旋转sprites,您应该编写如下代码

代码语言:javascript
代码运行次数:0
运行
复制
sprite.zrotation = M_PI/.5

但是我想从plist中调用浮点值,但我不确定如何在plist中正确地存储旋转浮点值,以及如何让spritenode从plist中调用它们的z旋转。有人能帮帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2015-07-19 04:35:15

假设随机化这些角度不是您想要的,并且您需要将每个级别的所有角度存储在某个位置,您可以这样做:

代码语言:javascript
代码运行次数:0
运行
复制
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

// saving a float
[defaults setFloat:0.123 forKey:@"someKey"];

[defaults synchronize];

要检索值,可以这样做:

代码语言:javascript
代码运行次数:0
运行
复制
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

// getting an Float
float myFloat = [defaults floatForKey:@"someKey"];

请记住,用户可以很容易地更改NSUserDefaults类使用的.plist文件。如果这让您感到困扰(可能不会),您可以硬编码NSArray或NSDictionary中的所有值。

编辑:

下面是你如何使用read/write values using .plist file。当我发布答案时,我没有注意到您实际上询问的是.plist文件,而不是NSUserDefaults (它也使用.plist文件)。所以,很抱歉,是我的错:)

下面是硬编码值的示例:

代码语言:javascript
代码运行次数:0
运行
复制
#import "GameScene.h"

@implementation GameScene{

    NSMutableArray *levels;

}

-(void)didMoveToView:(SKView *)view {
    /* Setup your scene here */

    levels = [NSMutableArray array];

    NSDictionary *level_1 =
    [NSDictionary dictionaryWithObjects:@[@(0.1f),@(0.01f),@(0.001f)] forKeys:@[@"key_1",@"key_2",@"key_3"]];

    NSDictionary *level_2 =
    [NSDictionary dictionaryWithObjects:@[@(0.2f),@(0.02f),@(0.002f)] forKeys:@[@"key_1",@"key_2",@"key_3"]];

    NSDictionary *level_3 =
    [NSDictionary dictionaryWithObjects:@[@(0.3f),@(0.03f),@(0.003f)] forKeys:@[@"key_1",@"key_2",@"key_3"]];



    [levels insertObject:level_1 atIndex:0];
    [levels insertObject:level_2 atIndex:1];
    [levels insertObject:level_3 atIndex:2];

    NSString *key = @"key_1";
    NSUInteger level = 1;

    if([self isAngleAvailableForKey:key andLevel:level]){

        CGFloat angle = [self getAngleForKey:key andLevel:level];

        NSLog(@"Angle for level %lu and key %@ is %f",(unsigned long)level,key,angle);

    }else{
        NSLog(@"Error, wrong level(%lu) or key(%@)",(unsigned long)level, key);
    }


}


//Check to see if there is such a level or key
-(BOOL)isAngleAvailableForKey:(NSString*)key andLevel:(NSUInteger)level{



    if(level < 1 || level > [levels count]){return NO;}

    if([[levels objectAtIndex:level-1] valueForKey:key] == nil){return NO;}

    return YES;

}
//If already is good, get the angle for given level and key
-(CGFloat)getAngleForKey:(NSString*)key andLevel:(NSUInteger)level{


    return [[[levels objectAtIndex:level-1] valueForKey:key] floatValue];

}

如果数据量不大,我个人的偏好是硬编码值。但这取决于你的决定。

如果有大量数据,那么.plist文件可能是更好的选择,因为它可以节省您不必要的内存消耗。

如果数据量非常小,那么我猜你甚至可以使用NSUserDefaults,但这应该是最后一个选项,因为NSUserDefaults是用来存储首选项或类似的东西的。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31495159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档