我想开发一款Android多人实时游戏.但我仍然混淆了沟通的最佳方式.我找到了一些选择:
我只是想知道其他实时游戏是如何做到的?我想知道最常见的做法,并且结果可以接受.
我很感激你的想法.谢谢!
任何人都可以推荐文章,书籍,教程吗?
也许是(文章,书籍,教程)关于多人游戏架构,HTML5网络,JavaScript,WebSockets,Node.js?
想象一下多人白板,几个人可以同时画画.为了简单起见,我们可以说白板上有一个可以被任何用户移动或删除的对象.没有用户拥有的对象的概念(即允许任何用户操纵任何对象是很重要的...这是一个免费的所有白板)
我的问题是这个......如果两个用户试图同时对该对象做一个不同的动作,即一个删除它,另一个移动它,会发生什么?
现在 - 只是让消息通过,它就完全没了.
一个想法是拥有一个服务器端控件,它可以解析谁拥有对象的控制权,并且在解决冲突之前不允许任何事情发生在客户端.解决冲突可以基于先到先得的原则.
即使这种情况发生得非常快,但是小延迟(~50-300ms)是不可接受的,因为在客户端必须立即进行移动.例如,不要操纵对象,而是想到笔.因为有一个延迟,直到他们已经开始画...不好!
另一个想法是有一个"请求控制"按钮,它要求服务器端扩展控制....与以前相同的想法,但现在他们不会因笔画的初始延迟而感到沮丧.这也不是那么好,因为他们必须按下那个按钮,直到他们可以做任何事情,而这个白板真的是给孩子们的......
还有其他方法吗?:)
当我学习各种技术时,我经常会想到我经常使用的应用程序如何实现这些东西.我和一些FPS一起玩了几个MMO.我做了一些环顾四周,发生在这个线程上:
http://www.gamedev.net/topic/319003-mmorpg-and-the-ol-udp-vs-tcp
我一直看到,当允许丢失一些数据包时UDP会闪耀.涉及的开销更少,更新更快.在环顾四周并阅读各种文章和主题之后,我发现通常会使用UDP完成字符定位.像FPS这样的游戏通常会使用UDP完成,因为发生了所有快速变化.
我已经多次看到有人指出同时使用UDP和TCP时可能发生的问题.这些问题可能是什么?新手程序员大多会遇到这些问题吗?在我看来,使用UDP和TCP的组合是理想的,获得每个的优点.但是,如果将两者结合使用会增加代码的大量复杂性以处理所引起的问题,那么在某些情况下可能不值得.
我正在寻找使用回滚网络代码构建一个浏览器多人游戏,该网络代码在客户端上运行确定性模拟.在遇到浮点路障之前,我已经在Flash中对网络代码进行了原型设计.
基本上,根据我的理解,Flash中的整数数学是通过将ints转换为Numbers,进行数学运算,然后转换回来完成的int.它显然更快,但这意味着不可能在不同的计算机体系结构中进行确定性数学运算.
在我将所有鸡蛋放入JavaScript篮子之前,我想问几个问题.
JavaScript中所有主流浏览器都有真正的整数运算吗?或者做一些浏览器做Flash事件并转换为浮点数/双精度数来进行数学运算然后再转换回int?
在不同的计算机体系结构中,是否有类似于BigDecimal或BigNum确定数学运算的东西?只要在合理范围内,我不介意一些性能损失.如果没有,是否有一些JavaScript定点库可以解决我的问题?
这是一个很长的镜头,但是有没有HTML5 2D游戏引擎,它具有像x/y位置和碰撞之类的东西的确定性数学?游戏引擎列表至少可以说是压倒性的.我对从头开始构建一个确定性的跨浏览器兼容引擎感到不安,但这可能就是我必须要做的.
注意:根据响应从HTML5编辑到JS.为我缺乏知识而道歉.
我正在开发一款名为“巫师战争”的游戏。此游戏需要允许2位玩家同时玩,并且需要TCP连接来传达咒语的创建/销毁等,以及UDP连接来处理位置等。它会有一个客户端和一个主机端。话虽这么说,我的程序旨在在Android上运行。我在网上找到的所有教程/信息都针对JApplets或类似的东西。因此,我想从如何建立/使用连接的简短代码示例中获得一些帮助,或者只是指向有关如何建立实际连接的足够有用信息的链接。
我已经完成了我的研究,但是我很难理解为什么有人会想要使用这些类型的服务器(Photon,SmartFox等)来进行游戏编程,因为它们已经提供了像.Net框架这样的东西.
我似乎很难理解使用这些昂贵的服务器之一而不是滚动自己的好处.编码游戏网络的大部分工作都不是你必须做的事情吗?
我想创建一个多人服务器/客户端游戏,但我从StackOverflow的专业人士那里听说像Photon这样的东西不值得付费,因为他可以"在一两天内为他的游戏创造类似的东西".我的用法是一个游戏,既是单人游戏,也是多人游戏COOP(客户端到客户端),如果它的销售情况良好,或者我只为该功能(服务器/客户端架构)获得kickstarter资金,可能是MMO.尽管很可能,我会像Valve那样对游戏进行编程,甚至单人游戏都是服务器/客户端架构,"服务器"位于客户端的离线系统上.
使用Photon比使用C#.Net制作自己的游戏服务器有什么好处?
我有一个可以装备多种武器的玩家对象.配备武器时,其变换的父级设置为其手.我已经搞砸了一段时间,并且不能让它对主机和客户端起作用.现在我正在尝试在服务器上装备武器,并告诉所有客户设置他们的父母变换.
public NetworkInstanceId weaponNetId;
[Command]
void Cmd_EquipWeapon()
{
var weaponObject = Instantiate (Resources.Load ("Gun"),
hand.position,
Quaternion.Euler (0f, 0f, 0f)) as GameObject;
weaponObject.transform.parent = hand;
NetworkServer.Spawn (weaponObject);
//set equipped weapon
var weapon = weaponObject.GetComponent<Weapon> () as Weapon;
weaponNetId = weaponObject.GetComponent<NetworkIdentity> ().netId;
Rpc_SetParentGameobject (weaponNetId);
}
[ClientRpc]
public void Rpc_SetParentGameobject(NetworkInstanceId netID)
{
weaponNetId = netId;
}
Run Code Online (Sandbox Code Playgroud)
在更新中,我正在更新武器转换
void Update () {
// set child weapon tranform on clients
if (!isServer) {
if (weaponNetId.Value != 0 && !armed) {
GameObject child = NetworkServer.FindLocalObject (weaponNetId); …Run Code Online (Sandbox Code Playgroud) network-programming multiplayer unity-game-engine unity-networking
我正在使用Swift,SpriteKit和Firebase进行多人游戏.
这是我第一次使用多人游戏和GameKit,所以我没有得到配对的概念.我读了Apple文档,但老实说它不清楚,它告诉我实时匹配可以做什么,并在objective-c中显示一些代码.
我花了很长时间在swift中搜索配对,我只发现了这个.
我知道每场比赛都是从比赛开始,matchRequest但我不知道该怎么做.
配对如何运作?我应该使用什么方法?有谁知道我在哪里可以找到一个例子?
我是使用ARCore和Sceneform for Android(Java)创建AR应用程序的新手.我正在使用云锚构建多人应用程序,其中两个或更多人可以在一个或多个资产上进行交互.当资产改变它的位置时,如何让事件向其他连接用户广播?
这是我的代码:
private AppAnchorState appAnchorState = AppAnchorState.NONE;
private SnackbarHelper snackbarHelper = new SnackbarHelper();
private StorageManager storageManager;
private Socket mSocket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/******************* Here **************************/
// connect to socket
mSocket = new ArSync().onCreate();
mSocket.connect();
// listen for change event
mSocket.on("modelChanged", new Emitter.Listener() {
@Override
public void call(final Object... args) {
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
//TODO: call the application to load reslove by number
//textView.setText("Current ID is :" +
args[0].toString()); …Run Code Online (Sandbox Code Playgroud) multiplayer ×10
android ×2
c# ×2
html5 ×2
tcp ×2
udp ×2
.net ×1
arcore ×1
firebase ×1
flash ×1
game-engine ×1
ios ×1
java ×1
javascript ×1
libgdx ×1
mmo ×1
networking ×1
node.js ×1
point ×1
real-time ×1
sceneform ×1
sprite-kit ×1
swift ×1
websocket ×1