Android intent LibGdx如何从LibGdx类返回到androidActivity
因此,在libgdx android项目中,我们有一个包含android活动的文件夹,另一个包含libgdx项目的源代码 要从Android活动启动“游戏”,我们使用Android intent LibGdx如何从LibGdx类返回到androidActivity,android-intent,initialization,libgdx,Android Intent,Initialization,Libgdx,因此,在libgdx android项目中,我们有一个包含android活动的文件夹,另一个包含libgdx项目的源代码 要从Android活动启动“游戏”,我们使用initialize(new MyGdxGame(),cfg) 现在我需要知道如何从游戏中的libgdx类返回android活动,如主菜单 我试图从Activity扩展类以获得contextApplication,但我无法填充第二个参数,因为程序无法识别libgdx类中的android类…在libgdx项目中使用android特定代
initialize(new MyGdxGame(),cfg)代码>
现在我需要知道如何从游戏中的libgdx类返回android活动,如主菜单
我试图从Activity扩展类以获得contextApplication
,但我无法填充第二个参数,因为程序无法识别libgdx类中的android类…在libgdx项目中使用android特定代码的标准方法是在libgdx核心项目中创建一个与平台无关的接口(例如,interface PlatformStuff
),然后在每个特定于平台的后端(例如,桌面或Android)使用特定于平台的对象实现该接口(因此class AndroidPlatformStuff实现PlatformStuff
)。您可以在构建界面时将特定于平台的界面实现传递到通用代码中(例如,new MyGdxGame(new AndroidPlatformStuff())
)
调用更改活动和上下文的Android代码可能需要更多的工作(因为它会与libGDX基础设施进行一些交互),但也应该是可行的。您应该能够使用教程来集成对广告的支持,以获得基本想法。请参阅或您应该创建回调;
创建一个接口并在android类上实现,然后在需要调用相关方法时将其传递给libgdx。首先,您应该在核心文件夹中创建一个接口类。这通常与游戏类放在一起。例如,对于名为ActionResolver的接口类,您的函数名为LoginFacebook()
接口类
package com.mygdx.game;
public interface ActionResolver {
public void LoginFacebook();
}
现在在游戏类中,您应该具有以下构造函数:
public SpaceXplorerGame(ActionResolver actionResolver)
{
this.actionResolver = actionResolver;
}
现在,在您的android文件夹中,在src->com.mygdx.game.android(您的包名)中,您应该创建您的处理程序类,在我的例子中,该类名为ActionResolverAndroid
public class ActionResolverAndroid implements ActionResolver {
Handler handler;
Context context;
public ActionResolverAndroid(Context context) {
handler = new Handler();
this.context = context;
}
public void LoginFacebook()
{
handler.post(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(context, LoginActivity.class);
context.startActivity(intent);
}
});
}
}
现在,从LibGdx调用函数LoginFacebook()将带您进入android中的LoginAcitivty.class。
希望我没有错过任何东西。用于广告平台的libGDX文档使用的正是您所需要的。它在libGDX核心中创建了一个接口,并在android启动器中实现了一个处理程序,可以从核心部分调用该处理程序
请参见此处:
基本上跳过所有广告内容。向下滚动到“控制”,只需执行以下部分:
- 在您的AndroidLauncher中注册一个新的处理程序。这是必要的,以便处理程序稍后可以在正确的android线程中处理接口的已实现功能…(请参阅“HelloWorldAndroid”)
- 在核心项目中创建一个接口(如IActivityRequestHandler)
- 让您的AndroidLauncher实现该功能,并使用处理程序在您的android线程中执行实际功能
最后,您需要向libGDX核心代码传递一个引用
class SingletonData{
private SingletonData(){
}
private static SingletonData instance;
public static SingletonData getInstance(){
if(instance==null){
instance = new SingletonData(); // can only be assessed here. no other class can generate a second instance
}
return instance;
}
private IActivityRequestHandler handler;
public void setHandler(IActivityRequestHandler handler){
this.handler=handler;
}
public IActivityRequestHandler getHandler(){
return this.handler;
}
}
在您的AndroidLauncher(即HelloWorldAndroid)中,在其创建结束时调用以下命令以注册它:
SingletonData.getInstance().setHandler(this);
现在,您可以在您喜欢的任何核心类中使用它,方法是:
SingletonData.getInstance().getHandler().showAds(true); // showAds or whatever your interface handler implements
PS:确保在游戏开始后调用getHandler(),这样就不会得到空引用