1
我使用Libgdx来管理屏幕,更新和渲染。Google Play多人游戏切换到游戏屏幕Libgdx
当我从WAITING_ROOM获得RESULT_OK时,我开始游戏屏幕,发生以下情况。
-
在候车室
- ,我可以看到我是谁发起的游戏室
- 我可以看到自动匹配的球员谁加入候车室
- 当MIN球员都在房间里,我得到“准备玩”
- 屏幕被切换到游戏画面
现在的问题。
当新游戏屏幕启动时,其中一个玩家正在显示,另一个玩家显示空白屏幕 有时,空白屏幕会显示在发起游戏的玩家的手机上,以及其他时间显示在玩家手机上加入了房间。
我在做什么错?
见我的代码:
上创建
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameActivity = new GameActivity(this, this);
participants = new Array<Player>();
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);
gameView = initializeForView(gameActivity);
AdRequest adRequest = new AdRequest.Builder()
.build();
adView = new AdView(this);
adView.setAdSize(AdSize.FULL_BANNER);
adView.setAdUnitId(AD_UNIT_ID);
adView.loadAd(adRequest);
RelativeLayout.LayoutParams gameParams =
new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
gameParams.addRule(RelativeLayout.CENTER_IN_PARENT);
gameParams.bottomMargin = 1;
adParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
adParams.addRule(RelativeLayout.CENTER_IN_PARENT);
layout.addView(gameView, gameParams);
layout.addView(adView, adParams);
if (mHelper == null) {
getGameHelper();
}
mHelper.setup(this);
setContentView(layout);
}
开始简单的游戏:
private void startQuickGame(){
Log.d(TAG, "StartQuickGame()");
final int MIN_OPPONENTS = 1, MAX_OPPONENTS = 1;
Bundle autoMatch = RoomConfig.createAutoMatchCriteria(MIN_OPPONENTS,
MAX_OPPONENTS, 0);
RoomConfig.Builder roomBuilder = RoomConfig.builder(this);
roomBuilder.setMessageReceivedListener(this);
roomBuilder.setRoomStatusUpdateListener(this);
roomBuilder.setAutoMatchCriteria(autoMatch);
Games.RealTimeMultiplayer.create(getApiClient(), roomBuilder.build());
//prevent screen from sleeping during players matching
Log.d(TAG, " startQuickGame()" + "createRoom called");
}
上创建ROOM
@Override
public void onRoomCreated(int statusCode, Room room) {
Log.d(TAG, "On room created()");
if(statusCode != GamesClient.STATUS_OK){
Log.d(TAG, "On room created() ERROR");
return;
}
showWaitingRoom(room);
}
在连接到ROOM
@Override
public void onConnectedToRoom(Room room) {
Log.d(TAG, "onConnectedToRoom.");
// get room ID, participants and my ID:
mRoomId = room.getRoomId();
mParticipants = room.getParticipants();
mMyId = room.getParticipantId(Games.Players.getCurrentPlayerId(getApiClient()));
// print out the list of participants (for debug purposes)
Log.d(TAG, "Room ID: " + mRoomId);
Log.d(TAG, "My ID " + mMyId);
Log.d(TAG, "<< CONNECTED TO ROOM>>");
}
SHOW候诊室
void showWaitingRoom(Room room) {
// minimum number of players required for our game
// For simplicity, we require everyone to join the game before we start it
// (this is signaled by Integer.MAX_VALUE).
final int MIN_PLAYERS = Integer.MAX_VALUE;
Intent i = Games.RealTimeMultiplayer.getWaitingRoomIntent(getApiClient(), room, MIN_PLAYERS);
// show waiting room UI
startActivityForResult(i, RC_WAITING_ROOM);
}
切换到游戏画面
public void startGame(boolean multiPlayer){
Log.d(TAG, "startGame()");
mMultiplayer = multiPlayer;
gameActivity.setScreen(new MultiTest(gameActivity)); //Game Screen Libgdx
Log.d(TAG, "Switched to MultiTest game screen");
}
谢谢你,乐于助人。发生错误是因为我试图在主活动UI线程上打开一个新屏幕。我修好了它 – user2510952