Apple开发人员教程网站有此页面,其中显示了如何为本地播放器报告多个成就的示例。该方法用Objective-C编写。
不幸的是,我无法理解Objective-C,而且我正在使用C#和Xamarin来开发iOS游戏。您能否将此方法从Objective-C转换为C#?
- (void) completeMultipleAchievements
{
GKAchievement *achievement1 = [[GKAchievement alloc] initWithIdentifier: @"DefeatedFinalBoss"];
GKAchievement *achievement2 = [[GKAchievement alloc] initWithIdentifier: @"FinishedTheGame"];
GKAchievement *achievement3 = [[GKAchievement alloc] initWithIdentifier: @"PlayerIsAwesome"];
achievement1.percentComplete = 100.0;
achievement2.percentComplete = 100.0;
achievement3.percentComplete = 100.0;
NSArray *achievementsToComplete = @[achievement1,achievement2,achievement3];
[GKAchievement reportAchievements: achievementsToComplete withCompletionHandler:^(NSError *error)
{
if (error != nil)
{
NSLog(@"Error in reporting achievements: %@", error);
}
}];
}
}
==========================
这是Apple网站上该教程网页的链接:
非常感谢。
答案 0 :(得分:1)
这应该让你开始:
//GKAchievement* achievement1 = [[GKAchievement alloc] initWithIdentifier: @"DefeatedFinalBoss"];
var achievement1 = new GKAchievement("DefeatedFinalBoss");
achievement1.PercentComplete = 100.0;
// NSArray* achievementsToComplete = @[achievement1, achievement2, achievement3];
// Using a strongly type C# Array vs. a loose typed NSArray
var achievementsToComplete = new GKAchievement[] { achievement1 };
GKAchievement.ReportAchievements
可以使用完成处理程序以ObjC样式处理://[GKAchievement reportAchievements: achievementsToComplete withCompletionHandler:^ (NSError * error)
GKAchievement.ReportAchievements(achievementsToComplete, (NSError error) =>
{
if (error != null)
{
Console.WriteLine($"Error in reporting achievements: {error}");
}
else
{
// Continue on a success report code path
}
});
通过Xamarin.iOS扩展的异步方法//[GKAchievement reportAchievements: achievementsToComplete withCompletionHandler:^ (NSError * error)
try
{
await GKAchievement.ReportAchievementsAsync(achievementsToComplete);
}
catch (NSErrorException error)
{
Console.WriteLine($"Error in reporting achievements: {error}");
}
答案 1 :(得分:1)
我猜ypu可以这样读:
public void reportAchievement(string identifier, float percentComplete)
{
var achievement;
try
{
achievement = new GKAchievement(identifier);
}
finally
{
// do nothing
}
if(achievement != null)
{
achievement.percentComplete = percentComplete;
GKAchievement.reportAchievements( new GKAchievement[]{achivement}, (e) => {
if (error != nil)
{
Console.WriteLine("Error in reporting achievements: %0", error);
}
});
}
}