从Plist转换CGPoint

时间:2015-03-25 18:24:42

标签: ios objective-c sprite-kit plist scene

我在Spritekit工作,我很陌生。我正在创建一个具有关卡的游戏,对于每个级别,我都试图将我的游戏中的精灵定位为与屏幕大小成比例。我用plist文件调用他们的位置。由于我根据屏幕的尺寸和大小定位每个精灵,我必须将它定位为这样的

Sprite.position = CGPointMake(self.scene.size.width /2, self.scene.size.height /2);

我的问题是,我怎么能从我的plist转换这个位置?我尝试使用

Sprite.position = CGPointFromString(level[@"Sprite"]);

并输入

CGPointMake(self.scene.size.width /2, self.scene.size.height /2);

在我的plist文件中,但它不起作用。

2 个答案:

答案 0 :(得分:1)

这是您从plist访问数据的方式:

NSString* path = [[ NSBundle mainBundle] bundlePath];
NSString* finalPath = [ path stringByAppendingPathComponent:@"MyGameData.plist"];
NSDictionary *plistData = [NSDictionary dictionaryWithContentsOfFile:finalPath];

最简单的方法可能是将x和y位置存储在2个单独的字符串中。像PlayerPositionX和PlayerPositionY

之类的东西

然后将字符串转换为浮点数:

float myFloat = [myString floatValue];

您还可以将单个字符串转换为CGPoint,如下所示:

CGPoint myPoint = CGPointFromString([NSString stringWithFormat:@"{%@}",textField.text]);

字符串必须采用{x,y}

格式

(感谢jrturton的回答here)。

答案 1 :(得分:0)

您可以通过以下方式解决将精灵定位到屏幕尺寸的问题:

首先你要像这样创建你的plist:

Sprite = {
   x = 20;
   y = 20;
}

然后你可以明显地得到以下值:

NSDictionary *spriteInfo = plist[@"Sprite"];
NSNumber *xPosition = spriteInfo[@"x"];
NSNumber *yPosition = spriteInfo[@"y"];

现在您可以通过两种方式解释这些值:

  • 它们代表您的精灵应该在默认屏幕上的位置(例如:320x568)并且您获得实际位置:

    actionPosition = xPosition * screenSize / defaultScreenSize;
    //ex: 40 = 20 * 640 / 320, if the current device has a width of 640.
    
  • 或者代表%值,也就是精灵应该在屏幕的20%处,因此您可以获得实际位置:

     actionPosition = screenSize * xPosition / 100;
    //ex: 128 = 20 * 640 / 100, if the current device has a width of 640.