我在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文件中,但它不起作用。
答案 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.