示例代码

本页包含Android和iOS的扩展源代码的例子和信息,以帮助你为这些平台创建你自己的本地扩展。

Android (Base Example)Android (Base Example)

我们为Android提供的扩展实例将包含做以下工作的函数。

这个扩展将利用一个.java文件,其内容在下面给出 (点击可打开)。

GenericTest.java

要在你的扩展中添加这样的文件,你需要在它的 Android Properties 下,首先输入一个类名(在这个例子中,是 "GenericTest"), 然后 点击 "Add Source",选择.java文件。这将把选中的文件添加到你的项目目录中-- 你可以 右键点击你的扩展名,选择 "在资源管理器中打开",并在那里看到源文件。

现在你可以在你的扩展中添加一个新的占位符文件,并在其中创建具有以下属性的函数 。

下面是AddTwoNumbers()函数的一个例子。

你现在可以从你的游戏代码中调用这些函数,并像其他内置函数一样使用它们。

var result1 = string(AddTwoNumbers(irandom(100), 50));
var result2 = BuildAString("Hello", "World");
var result3 = HowManyObjects(irandom(1000), irandom(1000), "Targets");
ReturnAsync(irandom(1000), irandom(1000));

ReturnAsync()函数将触发 Async - Social事件,所以你需要将该事件添加到你的对象中,并从其async_load映射中读取数据(该映射由上面给出的扩展的源代码填充)。

var type = async_load[? "type"];

if (type == "finished")
{
    var result4 = "value1: " + string(async_load[? "argument0"]) + ", ";
    result4 += "value2: " + string(async_load[? "argument1"]);
}

 

iOS (Base Example)iOS (Base Example)

为iOS提供的例子与上面给出的Android例子相同;只有源文件不同,我们将在本节介绍。

iOS扩展使用一个.h和一个.mm文件,两者的内容如下(点击打开)。

GenericTest iOS Source Files

要将这些文件添加到你的扩展中,你首先需要在它的iOS Properties下,输入一个类名(在这个例子中是 "GenericTest")。 然后你可以使用 "输入框架路径 "选项(如果这些文件存在于你用于构建的macOS机器上)或 "添加源代码 "选项(如果它们在你的开发机器上);无论你使用哪个选项,你都需要将它们指向包含.h.mm文件的那个目录。

你可以将这些源文件添加到上一节为Android设置的同一个扩展中,这意味着该扩展中已经定义的任何函数现在也可以在iOS上使用(鉴于Android和iOS上所有函数的外部名称都是一样的)。如果你正在创建一个新的扩展,你可以简单地创建函数 ,与之前描述的方式相同。

 

Android (Callbacks)Android (Callbacks)

你可以在你的.java扩展文件中使用以下回调函数。

public void onStart()
public void onRestart()
public void onStop()
public void onDestroy()
public void onPause()
public void onResume()
public void onActivityResult(int requestCode, int resultCode, Intent data)
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
public void onNewIntent(android.content.Intent newIntent)
public void onWindowFocusChanged(boolean hasFocus)
public void onConfigurationChanged(Configuration newConfig)


iOS (Callbacks)iOS (Callbacks)

你可以在你的.mm扩展文件中使用以下回调函数。

-(void) Init
-(void) onLaunch:(NSDictionary*)launchOptions
-(void) onResume
-(void) onPause
-(void) applicationDidEnterBackground:(UIApplication *)application
-(void) applicationWillEnterForeground:(UIApplication *)application
-(void) onStop
-(void) applicationProtectedDataDidBecomeAvailable:(UIApplication *)application
-(void) applicationProtectedDataWillBecomeUnavailable:(UIApplication *)application
-(void) applicationDidReceiveMemoryWarning:(UIApplication *)application
-(void) applicationSignificantTimeChange:(UIApplication *)application
-(void) application:(UIApplication *)application willEncodeRestorableStateWithCoder:(NSCoder *)coder
-(void) application:(UIApplication *)application didDecodeRestorableStateWithCoder:(NSCoder *)coder
-(void) application:(UIApplication *)application didUpdateUserActivity:(NSUserActivity *)userActivity
-(void) application:(UIApplication *)application didFailToContinueUserActivityWithType:(NSString *)userActivityType error:(NSError *)error
-(void) application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *replyInfo))reply
-(void) applicationShouldRequestHealthAuthorization:(UIApplication *)application
-(void) openURL:(NSURL *)url sourceApplication:(NSString *) sourceApplication annotation:(id)annotation
-(void) application:(UIApplication *)application userDidAcceptCloudKitShareWithMetadata:(CKShareMetadata *)cloudKitShareMetadata