2013-09-29 2 views
5

Я хотел бы использовать достижения и списки лидеров из API игр Google Play Game в моей Android-игре LibGDX. Единственное, что я достиг, это получить примеры с веб-сайта разработчика Game Services. Я пытался использовать этот код в своем проекте в течение многих дней, и у меня все еще ничего нет. Я также пытался следовать этому учебнику http://helios.hud.ac.uk/u1070589/blog/?p=202, но у меня нет «главного класса игры (тот, который простирается от ApplicationListener)», которая требуется в шаге 7. Я получил толькоКак пользоваться игровыми сервисами Google Play с LibGdx

  • DogeJump общественного класса расширяет игры
  • общественного класса MainActivity расширяет AndroidApplication реализует IActivityRequestHandler
  • общественного класса BaseScreen реализует экран
  • общественного класса GameScreen расширяет BaseScreen // который отвечает за геймплей

Это OnCreate метод из MainActivity.java

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); 
    } 

ответ

2

Off верхней части моей головы, Game класс должен реализовать ApplicationListener, поэтому класс вам не хватает, чтобы следовать учебник должен быть DogeJump.

0

Для меня, у меня есть класс с именем 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; 

} 

Это позволит мне взаимодействовать с игрой и службами будут вещами Google Cloud ...

Для моих экранов (как вы можете видеть из класса LDGame) Я просто делаю это

game.getPlatformInterface().anycallinYourInterface(); 

послать мои звонки в libgdx сторону дома .. (не забывайте Handler)

и любой экран активен, вызывает новый интерфейс в сторону 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); 

    } 

} 
Смежные вопросы