让我们想象一下非常简单的游戏...我们有一个迷宫和两个玩家试图通过互联网实时退出.
在每个移动游戏中,客户端应该将玩家的坐标发送到服务器并接受另一个客户端的当前坐标.怎么可能如此快速地进行这种交换(就像所有现代游戏一样).
好的,我们可以使用memcache或类似技术来减少服务器端的数据挖掘操作.我们也可以使用最快的网络服务器等,但我们仍然会遇到时间问题.
所以,问题是......
我尽量做到这一点.
到目前为止我所做的:我用的游戏将使用setTimeout或运行JavaScript setInterval.这不是闪光或任何特别的东西.到目前为止,我所做的就像测试运行(所以你可以更好地理解),几乎是循环Ajax,以便尽可能快地向PHP页面发送请求,然后PHP $_GET从请求中读取url,然后PHP编辑一个名为p1.html的文件$_GET,它只是玩家1的x和y轴坐标.所以在播放器2的浏览器中,它几乎完成了我上面所说的,现在当它接收到Ajax请求时,它将接收播放器1的坐标.因此JavaScript完成了它的工作,并将播放器1移动到播放器2的浏览器上.这就是我自己做的,我测试了它,是的,它是有效的,是的,当我修复所有的bug和东西时,它会永远持续下去.
说这就是我到目前为止所做的,但如果我想要一个在线格斗游戏或实时侧滚动游戏,这还不够快.这就是我需要帮助的地方.我在w3schools.com上了解了很多东西,但我不知道如何完成这项工作.那可能就是这样.我只需要浏览器1,将数据传输到浏览器2,类似于"1,100,200"或实际上更长一些,并让浏览器2将该数据作为JavaScript中的变量读取(类似x="received data";),就是这样.JavaScript将完成剩下的工作.
我确信我可以自己编写我需要的所有东西,但是为了将数据从A点发送到B点,每秒50次,我只是对此一无所知.甚至没有名字.最后,网址和示例将非常好(更清楚).特别是如果它已经在w3schools.com上(带有示例),我就错过了它.
在许多在线国际象棋游说中,我见过"引擎"的例子,骗子会在主游戏窗口的同时打开国际象棋程序.然后他会设置它以便将对手的动作转发到计算机,然后他将复制计算机的动作,直到他(几乎总是)获胜.
作为游戏开发者和主持人,有什么办法可以解决这个问题?
我绝对喜欢好的防御者游戏(例如Gemcraft,Protector:reclaiming the jone),因为他们在智力上非常具有挑战性; 这就像下棋,但少一点思考,多一点动作.可悲的是,那里没有那么多好的,我想我会自己创建一个,并通过在线提供与世界其他地方分享.
我从未使用过ActionScript,但是当涉及到在线游戏时,这是主要的选择.我试图以Java applet的形式找到一个体面的2D游戏,但无济于事.为什么会这样?我可以在Delphi for Win32中编写最舒适的游戏,然后人们需要下载可执行文件,这可能会阻止某些形式下载它,而且它只能在Windows上运行.我也熟悉Java,在过去四年左右与Java合作过; 虽然,我对游戏编程没有多少经验.
我不应该被所有在线游戏都用Flash编写并将我的后卫游戏作为Java小程序创建,或者我应该考虑学习ActionScript虚拟机的ActionScript和游戏开发(AS3看起来非常像 Java) ......但是,对我来说这是一项全新的技术,我可能永远不会专业地使用它.)
请你回答标题中的问题吗?为什么选择 Flash,而不是Java applets?这只是'政治'吗?
我需要在我正在使用python构建的MUD(或者更多,如果可能的话)中从玩家的当前房间中抽取2个半径图.房间设置为容器,self.exits = {'west':1, 'north':2}其中键是值(相邻房间的UID)所在的方向.客房仅以这种方式相连.self.location为0的玩家可以键入'n',并且基于上面的变量,他们的位置将是2,并且该房间的内容将玩家的UID附加到其内容.
所以,我希望根据上面的变量显示一个如下所示的地图,其中'u'是玩家的当前位置.
[ ]
|
[ ]-[u]
Run Code Online (Sandbox Code Playgroud)
我已经实现了这一部分,因为这只是一个半径1.这里有一个小的(经过大量修改,在这里发布)我如何做到这一点的片段,你会明白为什么我发帖,因为它的代码很差.
mloc = '[u]'
mn = ' '
mw = ' '
spn= ' '
spw= ' '
for Exit in room.exits.keys():
if Exit == 'north':
mn = '[ ]'
spn = '|'
if Exit == 'west':
mw = '[ ]-'
# player.hear() is our function for printing a line to the player's screen
player.hear(' '+mn)
player.hear(' '+sp)
player.hear(mw+mloc)
Run Code Online (Sandbox Code Playgroud)
在我疯狂的情况下,我成功地完成了所有8个不同方向的工作(对角线,不包括向上或向下).但是我必须循环使用我的第一个for循环解析的房间,然后绘制它们,然后将它全部分开,然后考虑(sp)aces的重叠,例如'\'或' |" 如果有相互交叉的路径.这个小小的任务立刻变成了噩梦,在我完成之前已经进入了200行.
另一个障碍是我只能逐行打印.因此,如果地图高50个字符,我必须有player.hear()50行,我不反对.在发布答案之前,请记住这一点.
我对格式化也不挑剔.我只想简单地想要一张"地图一览"来帮助玩家环游世界. …
我正在使用java在java中创建一个bot java.awt.Robot.机器人在浏览器上工作正常(我也使用Microsoft Word测试过它!)但是当我在游戏中运行它时,唯一有效的功能是mouseMove.我想构建一个只需按下键盘按钮的机器人.
我实例化了机器人类
Robot r = new Robot();
Run Code Online (Sandbox Code Playgroud)
然后我做一些简单的事情:按z,按1,移动鼠标并右键单击.
r.keyPress(KeyEvent.VK_Z);
r.keyRelease(KeyEvent.VK_Z);
r.keyPress(KeyEvent.VK_1);
System.out.println("Press 1 button");
r.keyRelease(KeyEvent.VK_1);
System.out.println("Release 1 button");
r.delay(1000);
System.out.println("Move mouse");
r.mouseMove(110, 690);
System.out.println("Press");
r.mousePress(InputEvent.BUTTON3_MASK);
System.out.println("Release");
r.mouseRelease(InputEvent.BUTTON3_MASK);
Run Code Online (Sandbox Code Playgroud)
为什么会这样?如果它在后台运行,这个Robot类可以在游戏中执行这些操作吗?
谢谢
更新:例如,如果我在PES 2012上运行我的机器人,它运行正常,但如果我在像Cabal这样的在线游戏上运行它,它不起作用?游戏的保护系统没有检测到任何东西,所以情况并非如此.
我正在研究一个学习node.js的项目,并正在寻找一些关于如何实时同步用户数据的建议.
假设您有一个2D矩形地图(大约600x400),其中有许多玩家占据该地图上的x,y位置.每个用户都可以使用箭头键导航,并以某种基本方式与其他用户进行交互.鉴于这将通过HTTP播放,在处理和同步用户数据方面最好的设计模式是什么,以提供最流畅,最快捷的体验?
我可以想到几个选项,但会更多的想法/澄清:
客户端将位置数据发送到服务器,服务器将所有位置分配给所有客户端,屏幕显示结果.重复.缺点是客户端滞后于数据往返所需的时间,但好处是它们与所有用户同步.
客户端呈现它认为不断的位置,将位置数据发送到服务器,服务器将所有位置分配给所有客户端,然后使用服务器数据更正客户端数据的屏幕呈现.上行是一个更快的反应,下行是轻微的同步损失.
两者的混合,但不是使用(x,y)坐标,而是使用[先前x/y和时间,当前x/y和时间的矢量,在时间间隔建议x/y],然后可以用于绘制不断移位的抛射路径.这似乎很难实现.
有什么指针吗?
让我感到好奇的一件事是网络游戏如何能够实时处理真正新颖或独特的成就,并立即给你一个徽章.
简单的事情就像获得10次杀戮或者完成一个级别似乎很容易,但是像跳过某人一样,将你的剪辑中的每一颗子弹射杀一个人的东西 - 或类似的东西似乎是非常疯狂的编程.
他们是否只有一个大型处理器,可以读取所有活动的实时日志,并且不断计算每项成就 - 或者是将游戏本身编入的成就计算到游戏逻辑中?似乎后者并非如此,因为游戏的新成就经常出现.
对于这种事情,是否有完善的模式或架构?
为移动浏览器建议一些开源的HTML5 + JS游戏引擎.应该适用于IOS和Android浏览器.
我想制作一个像Travian一样的网络游戏(或类似Ikariam).该游戏将基于PHP和MySQL.我想知道如何才能实现游戏属性的实时更新.
对于前端,我可以通过使用AJAX调用(从数据库中获取最新值),甚至虚假更新值(不与服务器通信)来实现.
对于后端,这是由PHP cron作业(每隔几秒运行一次)完成的吗?如果是这样,有人可以提供一些示例代码吗?
顺便说一句,我知道如果我使用IIS + FastCGI会有麻烦.
===版本信息===
PHP:5.2.3
IIS:6.0与FastCGI
操作系统:Windows Server 2003 Standard R2
如果我想编写一款基于桌面的游戏,我可以提取一些 XNA 代码和 UDP 套接字并制作一款不错的多人游戏。我会非常清楚如何编写我想要的游戏。
但如果我想编写一个基于浏览器的在线多人游戏,我该怎么做呢?你不能使用 XNA...我一直在研究一些问题,我看到 PHP 和 ASP.NET、Silverlight、Flash 和 Java 作为替代语言...我真的不明白它是如何工作的。我的意思是,对于基于桌面的游戏,您要打开 UDP 套接字并接受客户端并传输数据、更新玩家状态、使用 XNA 绘制结果。但是在浏览器中,如何打开套接字之类的东西?这个概念是如何运作的,通过网络浏览器与人们实时交流。有什么方向吗?我熟悉C#,半熟悉Java。从未接触过任何 Flash、ASP.NET 或 Silverlight。
我打算创建一个在线Gameboy风格的游戏(我打算尝试尽可能真实地重现游戏而不直接模仿它),但我不确定我可能会使用什么技术.
作为参考,我打算尝试重新创建Gameboy Color的神奇宝贝交易卡游戏.(这里的视频示例)
游戏不使用大量不断的背景重绘,并且大多涉及我猜想的精灵动画和关键帧动画.
<canvas>具有Javascript 的HTML 元素是否非常适合处理简单的2D逐帧更新动画,还是其他技术更适合处理它?是否还有可靠音频的HTML解决方案?
online-game ×12
javascript ×4
java ×3
flash ×2
php ×2
achievements ×1
ajax ×1
android ×1
audio ×1
awtrobot ×1
bots ×1
c# ×1
canvas ×1
chess ×1
game-engine ×1
html ×1
html5 ×1
ios ×1
live-update ×1
mmo ×1
mud ×1
multiplayer ×1
mysql ×1
node.js ×1
python ×1
python-2.7 ×1
xna ×1