编辑:我已经做了一个干净的,新的项目,但仍然无法让它工作.请下载它,有一些代码可供查看,可能很容易让专业人士或任何人远程体验,看看我做错了什么.只是试图发送整数.
http://www.2shared.com/file/fPOCLlg5/gkTest.html
你好
我正试图在我的iphone游戏中实现Game Center多人游戏,并且无法理解Apple Docs和第三方有关发送和接收数据的样本.
有人可以请在官方Apple文档中解释代码示例:http: //developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/GameKit_Guide/MatchesandVoice/MatchesandVoice.html#//apple_ref/doc/uid/TP40008304-CH10-SW4
或者帮我弄清楚我提供的示例代码.它是一个预先构建的类,用于处理所有游戏中心任务,以及用于发送和接收数据的样本将是:
- (void) sendPosition
{
NSError *error;
PositionPacket msg;
msg.messageKind = PositionMessage;
msg.x = currentPosition.x;
msg.y = currentPosition.y;
NSData *packet = [NSData dataWithBytes:&msg length:sizeof(PositionPacket)];
[match sendDataToAllPlayers: packet withDataMode: GKMatchSendDataUnreliable error:&error];
if (error != nil)
{
// handle the error
}
}
Run Code Online (Sandbox Code Playgroud)
接收:
- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID
{
Packet *p = (Packet*)[data bytes];
if (p.messageKind == PositionMessage)
// handle a position message.
}
Run Code Online (Sandbox Code Playgroud)
关于此代码形成官方文档的重要问题是:
哪里PositionPacket/ Packet …
试图实现多人游戏.使用Game Center中的示例- 发送和接收数据.
一切似乎都没问题,但在苹果文档中也有关于邀请处理程序的说法.
[GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite) {
// Insert application-specific code here to clean up any games in progress.
if (acceptedInvite) {
GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithInvite:acceptedInvite] autorelease];
mmvc.matchmakerDelegate = self;
[self presentModalViewController:mmvc animated:YES];
} else if (playersToInvite) {
GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease];
request.minPlayers = 2;
request.maxPlayers = 4;
request.playersToInvite = playersToInvite;
GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease];
mmvc.matchmakerDelegate = self;
[self presentModalViewController:mmvc animated:YES]; …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一款实时多人游戏,并且一直在评估各种基于云的托管解决方案.我不确定App Engine是否符合我的需求,并会对任何反馈表示感谢.
从本质上讲,我希望系统能够像这样工作:玩家A计算第n轮,并在该轮结束时生成游戏状态的哈希.然后,他将该轮的命令和散列作为http POST发送到服务器.玩家B同时做同样的事情.
服务器在处理来自播放器的POST时,首先将收到的哈希码写入内存缓存.如果来自其他播放器的散列还没有在memcache中,它会等待并定期检查memcache以查找其他玩家散列.只要两个哈希都在memcache中,它就会将它们进行相等性比较.如果它们相等,则服务器将每个播放器的命令作为http响应发送给相应的另一个播放器.
这样的一轮应该持续大约半秒钟,这意味着每位玩家每秒两次请求.
当然,这种方式只有在至少有两个应用程序实例运行时才能工作,因为必须并行处理两个请求.此外,内存缓存必须在所有实例上保持一致,相当可靠,并立即更新.
我不能使用XMPP,因为我希望我的游戏能够在受限制的网络中运行,所以它必须限制在端口80上的http.
有没有办法强制应用程序的两个实例始终运行?我的设计中是否存在明显的缺陷?您认为这样的架构可能适用于App Engine吗?如果没有,您会建议基于云的解决方案?
我正在创建一个多玩家iPhone游戏,使用多玩家教程作为以下链接的骨架http://www.raywenderlich.com/3276/how-to-make-a-simple-multiplayer-game-with-game- center-tutorial-part-12.
使用我正在使用的架构(GameCentre peer to peer),其中一个设备扮演服务器的角色.我有一个问题,那就是数据包大小的限制是什么?平均而言,我需要每次发送890个字节...
我正在尝试与Game Center实施邀请,有一件事我不明白.好的,我已经从一个设备向另一个设备发送了邀请.然后我在接收器上有一个UIAlertView,询问我我想接受或拒绝邀请.当我接受它时,它是这样处理的:
[GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite)
{
// Insert application-specific code here to clean up any games in progress.
if (acceptedInvite)
{
GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithInvite:acceptedInvite] autorelease];
mmvc.matchmakerDelegate = self;
[presentingViewController presentModalViewController:mmvc animated:YES];
}
else if (playersToInvite)
{
GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease];
request.minPlayers = 2;
request.maxPlayers = 4;
request.playersToInvite = playersToInvite;
GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease];
mmvc.matchmakerDelegate = self;
[presentingViewController presentModalViewController:mmvc animated:YES];
}
};
Run Code Online (Sandbox Code Playgroud)
嗯,这很好,但接下来呢?发件人设备显然正在等待某种标准类型的响应,因为它还会显示一条警告,告诉我如果我点按"立即播放",则会收到一些尚未接听的邀请.
那么我该如何接受邀请呢?我应该寄回什么样的数据(以及如何)?我究竟应该在接收器方面做些什么呢?点击"接受"后游戏是否应立即开始,或者我应首先关闭AlertView,然后点击"立即播放"?
Ray Wenderlich的教程说我应该选择第二种方式,但是当解除警报并点击"立即播放"时,发现发送方设备仍在等待响应并且不知道我已经接受了邀请.如果我此时点击"立即播放",那么,如上所述,它会显示一条警告,表示应用程序正在等待响应.所以,如果你曾经这样做过,请解释我应该怎么做.谢谢!
我有具有相应客户端对象的服务器对象.要保持同步的数据位于服务器对象的键/值字典中.为了使客户端对象与服务器对象保持同步,我希望服务器为每个对象的每一帧发送键/值字典.
什么数据结构/算法允许我使用最少的位发送键/值字典列表?
奖励约束1:对于每种类型的对象,某些键的值比其他键的更改频率更高.额外约束2:服务器端的内存使用相对昂贵.
compression networking client-server multiplayer data-structures
在我的Android游戏中,我希望玩家能够邀请他们的朋友参加将在以后日期和时间进行的游戏比赛.创建比赛的玩家选择此日期和时间.我希望这些邀请能够处于待处理状态,这意味着用户不必立即接受邀请,而是将它们放在待处理列表中,以便他们可以随时接受它们,只要它在日期之前和游戏将要发生的时间.游戏本身是一个基于实时的游戏.
我想过使用Google Play游戏服务来完成游戏中的这个和其他事情,比如成就等等,我相信它可以很好地与实际游戏配合使用.它跨平台工作的事实也是一大优点.问题是游戏服务如何处理邀请.来自Google开发者文档:https: //developers.google.com/games/services/common/concepts/realtimeMultiplayer
会议室:举办游戏的虚拟会议空间.可以邀请玩家加入房间,或自动匹配.连接到同一房间的玩家可以相互交换游戏数据.
参与者:可以参与游戏的玩家.本地玩家可以从他们的圈子向其他玩家发送邀请以加入房间,或者请求与随机玩家自动匹配.发送邀请的玩家将看到接受游戏邀请的通知.如果玩家接受邀请,他们将加入房间.房间中参与者的状态由Google Play游戏服务管理并发送给游戏客户端.
这一切都是当场完成的,当所有玩家都接受了邀请时,游戏应立即播放.我的问题是:有没有办法在Google Play游戏服务中解决这个问题,以便使用我的邀请系统?或者是否有任何其他游戏服务可以支持我想要实现的目标?
我曾经在游戏服务中解决过的一个想法就是像两个不同的邀请一样处理它:一个玩家邀请他或她的朋友参加一段时间后会发生的游戏.当被邀请的朋友接受该邀请时,在他们的应用程序中设置计时器,在游戏开始前10分钟.当计时器结束时,显示对话框,其中玩家再次可以接受他们是否想要参与游戏.这是在创建房间时,游戏将像普通的实时多人游戏一样工作.这个解决方案的问题是邀请.我不认为他们可以等待,但必须在现场接受,这不是我的应用程序应该如何工作.
我正在尝试为基于回合制的多人游戏的Google Play服务附带的"玩家选择器UI"创建自定义UI屏幕.可以在此处看到默认值:https: //developers.google.com/games/services/android/realtimeMultiplayer?hl = fr-CH#invite_players_option
该页面(我知道的实时)提到了如何使用默认UI以及可以使用自定义UI,但没有提到自定义外观的实际方法.我不是那些巨大的图标的粉丝,而是一个简单的列表.我一直试图研究这几天,但什么都没发现.
我正在寻找任何帮助我需要调用哪些方法来自定义.是在onActivityResult方法中完成的吗?有没有人有运气做类似的事情?
谢谢
user-interface android multiplayer google-play-services google-play-games
我刚刚开始玩pygame,并且遇到了一个问题 - 当我为2名玩家制作游戏时,第二个角色总是滞后.这是我的代码.
import pygame, sys
from pygame.locals import *
pygame.init()
clock = pygame.time.Clock()
background_img = pygame.image.load('Data/background.jpg')
size = background_img.get_size()
pygame.mixer.init()
pygame.mixer.music.load('Data/song.wav')
pygame.mixer.music.set_volume(0.7)
pygame.mixer.music.play(-1)
dot_img = pygame.image.load('Data/dot.png')
dotx = 0
doty = 0
dotx_speed = 0
doty_speed = 0
circle_img = pygame.image.load('Data/circle.png')
circlex = 0
circley = 0
circlex_speed = 0
circley_speed = 0
display = pygame.display.set_mode(size)
pygame.display.set_caption('Game')
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
dotx_speed = …Run Code Online (Sandbox Code Playgroud) 我在计算 Netcode 中玩家的 ping 时遇到问题。我有一个大厅列表,我想在客户端连接之前显示每个大厅的预期 ping。目前,我正在使用它NetworkManager.Singleton.NetworkConfig.NetworkTransport.GetCurrentRtt(0);来计算 ping。有没有办法在完全连接到中继之前知道 ping?
multiplayer ×10
game-center ×4
iphone ×3
objective-c ×3
android ×2
compression ×1
invite ×1
lag ×1
networking ×1
pygame ×1
python ×1
real-time ×1