所以在我的应用中,我有2个玩家在游戏中。分配玩家1的头或尾,然后分配玩家2的那一侧,而不分配玩家1的那一侧。也就是说,如果玩家1为正面,则玩家2为正面,反之亦然。
要在分配玩家2边之前检查玩家1是哪个边,我有一个回调设置来获取已分配哪一个边的玩家1。回调看起来像这样。
public interface Player1SideCallback {
void onCallback(String side);
}
private void player1Side(final Player1SideCallback callback) {
FCGames.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
HomePage.getCurrentGameID(new HomePage.CallbackID() {
@Override
public void onSuccess(String currentGameID) {
String player1Side = dataSnapshot.child(currentGameID).child("HeadsOrTails").getValue().toString();
callback.onCallback(player1Side);
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
这是一个非常基本的回调。
现在,当玩家单击join
按钮时,使用以下代码片段将他们分配为玩家2:
adapter = new MyRecyclerViewAdapter(this, openGames, new MyRecyclerViewAdapter.OnButtonClickListener() {
@Override public void onButtonClick(String id, final int position) {
String gameID = openGames.get(position);
second = new User(userName, 0, getSide2(), FirebaseAuth.getInstance().getUid(), gameID, false);
gm.setUser2(second);
FCGames.child(gameID).child("user2").setValue(second);
HomePage.setCurrentGame(gameID);
HomePage.setUserPosition(2);
}});
enter code here
如您所见,我在变量second
周围留有行距,因为这实际上是在创建新播放器的地方。并说getSide2()
的地方就是分配播放器2的一面。
但是,我正在努力做到这一点。我在名为getSide2()
的方法中调用回调,以尝试正确地将右侧分配给用户2
private String getSide2() {
player1Side(new Player1SideCallback() {
@Override
public void onCallback(String side) {
if(side.equals("Heads")) {
String side2 = "Tails";
} else {
String side2 = "Heads";
}
}
});
}
所以我想为player2分配变量side2
,但是我不确定如何从使用回调的方法返回该值。
如何使用这种逻辑为用户2正确分配正确的一面?