[英]How to use Google Play Game Services with LibGdx
我想在我的LibGDX Android游戲中使用Google Play游戲服務API的成就和排行榜。 我唯一能做的就是從Game Services開發者網站上運行示例。 我一直試圖在我的項目中使用這段代碼很多天,我什么都沒有。 我也試過按照這個教程http://helios.hud.ac.uk/u1070589/blog/?p=202但我沒有“主游戲類(從ApplicationListener擴展的那個)”這是在步驟7中需要。我只有
這是來自MainActivity.java的onCreate方法
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
thingy=this;
RelativeLayout layout=new RelativeLayout(this);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
View gameView=initializeForView(new DogeJump(this),false);
adView=new AdView(this,AdSize.IAB_MRECT,"ca-app-pub-XXXXXXX363095/9011689567");
adView.loadAd(new AdRequest());
layout.addView(gameView);
RelativeLayout.LayoutParams adParams=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
layout.addView(adView,adParams);
setContentView(layout);
//initialize(new DogeJump(this),false);
}
在我的頭腦中, Game類應該實現ApplicationListener
,所以你缺少遵循教程的類應該是DogeJump
。
對我來說,我有一個名為LDGame的類,如下所示:
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
public class LDGame extends Game implements ApplicationListener {
private static RequestHandler requestHandler;
private static GoogleInterface platformInterface;
public LDGame(RequestHandler requestHandler, GoogleInterface anInterface) {
this.requestHandler = requestHandler;
this.platformInterface = anInterface;
}
@Override
public void create() {
Assets.loadAll();
//platformInterface.LogOut();
setScreen(new MainLogin(this, false));
}
@Override
public void resume() {
super.resume();
// Relase static resources
Assets.loadAll();
}
public GoogleInterface getPlatformInterface() {
return platformInterface;
}
public RequestHandler getRequestHandler(){
return requestHandler;
}
}
這是我處理獲取接口的基礎知識。 (和你的dogejump一樣)
然后我的MainActivity為Android端做這個
public class MainActivity extends AndroidApplication implements RequestHandler, GameHelperListener,
GoogleInterface, RealTimeMessageReceivedListener, RoomStatusUpdateListener, RoomUpdateListener,
OnInvitationReceivedListener, RealTimeReliableMessageSentListener, OnImageLoadedListener, OnStateLoadedListener, ConnectionCallbacks{
private View gameView;
private GameHelper mHelper;
private GameHelperInterface mGHInterface = null;
private LoginInterface mLoginInterface = null;
private ConfirmInterface mConfirmInterface = null;
private OnLeaderboardScoresLoadedListener theLeaderboardListener;
private RoomUpdateListener mRoomUpdateListener= this;
private Handler libGDXHandler;
// Debug tag
final static String TAG = "Liars Dice Multi";
// Request codes for the UIs that we show with startActivityForResult:
final static int RC_SELECT_PLAYERS = 10000;
final static int RC_INVITATION_INBOX = 10001;
final static int RC_WAITING_ROOM = 10002;
final static int RC_SETTINGS = 10004;
// Request Key for AppStateClient Slot
final static int ASC_SLOT_UNFINISHED_GAMES = 0;
static final int ASC_SLOT_SERVER_UNFINISHED_GAMES = 1;
// Room ID where the currently active game is taking place; null if we're
// not playing.
String mRoomId = null;
Room mRoomCurrent = null;
int mCurrentToken = 1;
// Are we playing in multiplayer mode?
boolean mMultiplayer = false;
// The participants in the currently active game
ArrayList<Participant> mParticipants = null;
ArrayList<String> listIgnoreTheseIDs = new ArrayList<String>();
// My participant ID in the currently active game
String mMyId = null;
//Token Trackers
ArrayList<Integer> readyToPlayTokens = new ArrayList<Integer>();
// If non-null, this is the id of the invitation we received via the
// invitation listener
String mIncomingInvitationId = null;
// Message buffer for sending messages
byte[] mMsgBuf = new byte[2];
ArrayList<String> messagesRecieved = new ArrayList<String>();
ArrayList<tokenInfo> listTokensSent = new ArrayList<MainActivity.tokenInfo>();
HashMap<Integer, tokenInfo> mapTokensSent = new HashMap<Integer, MainActivity.tokenInfo>();
// flag indicating whether we're dismissing the waiting room because the
// game is starting
boolean mWaitRoomDismissedFromCode = false;
Context activityContext;
MainActivity mA;
private AdHubView adView;
private boolean bCheckingTimes;
boolean bAnyRoomEvent = false;
private long oldCreationTime;
private Intent previousMatch;
private int iServerBadAttempts = -1;
public MainActivity(){
libGDXHandler = new Handler();
mHelper = new GameHelper(this);
mHelper.enableDebugLog(true, "Helper");
//create a listener for getting raw data back from leaderboard
theLeaderboardListener = new OnLeaderboardScoresLoadedListener() {
@Override
public void onLeaderboardScoresLoaded(int arg0, LeaderboardBuffer arg1,
LeaderboardScoreBuffer arg2) {
}
};
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SearchLayout layout = new SearchLayout(this);
SearchLayout.setSearchActivity(this);
// starts libGDX render thread
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
gameView = initializeForView(new LDGame(this, this), true);
adView = new AdHubView(this, "2011000001_001", AdSize.BANNER);
RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
layout.addView(gameView);
layout.addView(adView, adParams);
setContentView(layout);
//mHelper.setup(this);
mHelper.setup(this, GameHelper.CLIENT_GAMES | GameHelper.CLIENT_APPSTATE | GameHelper.CLIENT_PLUS, null);
mHelper.getPlusClient().registerConnectionCallbacks(this);
activityContext = this;
mA = this;
}
這是為了讓我能夠與Game Servives和Google Cloud的東西進行交互......
對於我的屏幕(從LDGame類中可以看到)我就是這樣做的
game.getPlatformInterface().anycallinYourInterface();
將我的電話發送到房子的libgdx端..(不要忘記處理程序)
無論Screen處於活動狀態,都會將新接口調用到libGDX端,如下所示:
//this will set the ConfirmInterface in the Android Activity
//and allow for future calls to call any implemented methods
//that are set inside the ConfirmInterface
private void setCallbackHandler(){
game.getRequestHandler().confirm(new ConfirmInterface() {
@Override
public void yes() {
Gdx.app.log("LDGame", "Clicked Yes");
dLog("have a direct invite, so waiting for it to process");
startNextScreen();
}
public void no() {
Gdx.app.log("LDGame", "Clicked No");
}
@Override
public void loginFailed(final boolean failedForPreviousNumberOfAttemtps, final long timeElapsed) {
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
setGoogleButtonImage(false);
if(failedForPreviousNumberOfAttemtps){
showFailedLoginForBadAttempts(timeElapsed);
}
}
});
}
@Override
public void loginSucceeded() {
//this means the login for both services is good, and the data returned meets
//whatever sign in criteria is set
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
setGoogleButtonImage(true);
game.getPlatformInterface().loadInvitations();
}
});
}
@Override
public void firstLogin() {
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
showFirstLogin();
}
});
}
@Override
public void googleSucceeded() {
//this means that google just returned a valid hit
game.getPlatformInterface().checkIfServerTimesAreValid();
showSignOutBar();
}
@Override
public void needToCheckTimesOnServer() {
//this means that there are three times or more on the server for incomplete games
//the only way to clear this is to try and do a quick check against a room login
Timer.schedule(new Timer.Task() {
@Override
public void run() {
game.getPlatformInterface().checkIfServerTimesAreValid();
}
}, 1f);
}
@Override
public void onInvitationReceived() {
game.getPlatformInterface().loadInvitations();
Assets.soundArrive.play();
}
@Override
public void haveInvitations(int count) {
// TODO Auto-generated method stub
}
});
}
所以在我的Android中我可以這樣做:
@Override
public void onSignInFailed() {
mConfirmInterface.loginFailed(false, 0);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.