Articles of 建筑

HTML5 2D游戏渲染器

我有一个deviseHTML5 2D游戏渲染器的问题。 我读过最好不要让实体绘制自己,而是把所有的绘图函数放在渲染器中。 编码了一下后,我意识到这确实有它的优点。 例如,我可以在我的渲染器系统中有一个辅助函数列表,比如drawRotatedImage() , getSprite() , setFontSize() ,以及上下文variables等。 然而,这不会导致一个非常臃肿的渲染类,像drawTree() , drawMonster() , drawPlayer() , drawBall()或任何实体的drawBall() ? 另外,我将如何轻松将实体对象映射到相应的绘图函数? 我将不得不做一个if (entity.type == 'monster') this.drawMonster(); else if (entity.type == 'tree') this.drawTree(); if (entity.type == 'monster') this.drawMonster(); else if (entity.type == 'tree') this.drawTree(); 之类的事情?

将单人游戏客户转换成热门游戏

我正在制作一个纸牌游戏(受Dominion,Hearthstone,Gwent等人的启发)。 现在建立它的方式,有一个player manager来处理玩家的资源和手牌,而我有一个game manager来处理其他事情。 目前的情况是这样的,幕后真的只有一个玩家,而对手实际上就是game manager ,不管游戏规则如何,都会使用卡片,通过networking发送的信息来镜像真正的对手正在他们的电脑上做事。 (我不在乎作弊,我不打算做大,我只想和全国各地的朋友一起玩卡牌游戏。) 不过,我也想在这个游戏上有一个热门的变种。 换句话说,在一台计算机上由两个人玩。 我不知道在实践中是否会奏效。 在对手的回合中,回合的长度以及玩家能够做多less的事情还没有完全确定(注意:允许玩家彼此保密)目前并不担心。 我将如何实施它最简单? 只要有一名player manager “切换双方”,一旦交易完成就将其所有领域换掉? 这看起来不明显,容易出错。 第二个球player manager ? 这将需要对game manager相当多的改写,并且记住它仍然应该主要在线使用。

游戏引擎架构图

你会帮我吗? 我正在使用TypeScript作为主要语言从头开始构建一个游戏引擎。 有谁知道我可以从哪里获得一些可以引导和激励我的UML /体系结构图?

关于如何回应“事件”的问题

事件发生在游戏中时,最佳做法是什么? 例如: 你有一个传感器。 当某个特定的游戏角色靠近该传感器时,必须播放一个声音,并且必须closures一扇门。 当人物A与animationi ,人物B与animationj发生碰撞时, A和B的特殊graphics效果,音效和生命点减less都应该生效。 此外, A和B必须被迫返回一些特定的animation。 用户按下左键,所以演员A必须移动。 我想知道的是:你是否直接在事件处理程序中播放声音,移动播放器,closures门(调用相关方法,如PlaySound(..) ,, CloseDoor()或) MovePlayerLeft() ),还是使用某种types的基于消息的系统,以便当调用演员管理员代码时,它看到演奏者必须被移动到左边并将其移动到左边。 而且,当声音管理器代码被调用时,它看到一个特定的声音必须被播放并播放,等等。 PS。 我真的很高兴看到一些参考书籍/论文/文章阅读相关的东西。

如何制作stream畅的animation

说我想写一个纸牌游戏。 我有一张牌,我希望能够画出从手牌到桌牌的平滑animation。 我正在寻找关于如何优雅地表示数据结构中的情况的建议。 当然,我并不是仅仅对卡片感兴趣,而是一般来说,这似乎是一个更复杂的用户界面的问题。 手的明显表示是数组/卡片列表。 给定一个2d空间的矩形,这只手是微不足道的绘制。 当玩牌时,我可以从arrays中移除这张牌,并创建一个新的结构来绘制该牌沿着我喜欢的任何曲线移动。 问题是如何手绘。 在微不足道的实现中,手在一瞬间缩小一张卡(当数组被replace时)。 另外,选中的牌现在在牌手的上方或下方(正如在抽牌之前或之后抽牌一样),而前一个牌位于牌旁边。 这些问题我不知道如何解决。 如果试图一次移动几张牌,他们会变得更糟。 最有可能的做法是使每张卡片成为一个独立的身体,以便知道它在飞机上的位置和运动(可能的话,z轴使重叠起作用,因为OpenGL允许这样做)。 这似乎是一个糟糕的devise,让系统几乎总是保持固定的形状太多的灵活性。 它也看起来像一个无法解释的错误的食谱。 我想听到有人这样做,最好的办法是什么。 简单地说,“数据结构中的具体和限制性表示”与“有一定外部限制的完全自由的环境”。 非常感谢

我怎样才能避免碰撞处理物理方面的types检查?

我有一个负责处理碰撞物理方面的课程。 当碰撞检测器发现碰撞时,它通知碰撞中的两个实体照顾游戏玩法。 它还通知PhysicsGenerator采取碰撞物理的汽车。 我不知道是否可以避免在PhysicsGenerator的handleCollision()方法中进行types检查。 我想要做的就是在碰撞中的两个实体上施加一个力量,将它们向后推。 但是,如果他们是MovingEntities我只能这样做。 如果其中一个是StaticEntity呢? 在这种情况下,应该区别对待。 我不知道如何在不使用instanceof做到这一点。 这通常如何处理?

渲染系统是否应该知道实体管理器?

在一个基于实体组件的游戏架构中,我认为实体管理器是一个“高层次”系统,而渲染系统是一个“低层次”系统。 当我编辑实体的位置组件时,渲染系统是否应该知道实体管理器,并获得它的位置,还是不应该有低层系统与高层系统进行通信? 我认为这不应该是这样的。 相反,如果实体被移动,场景管理器(也称为“高级”)应该调用渲染系统的“移动”function,并且渲染系统更新位置。 这意味着每个实体交互都必须是我的渲染系统中的一个function。 恐怕在第一种情况下我会得到循环依赖。 这是正确的路吗?

如何创建一个沙盒电子游戏

我有很多编程方面的经验,但是我是游戏开发领域的新手,所以我不知道我不知道什么。 我想创建一个MMORPG沙盒游戏。 当我说沙盒游戏的时候,我有一些像Minecraft一样的东西,你可以在游戏世界中做出改变,并且坚持下去,服务器上的所有玩家都可以看到它们。 就像你种植树木一样,即使你注销,或者如果你在地面上挖洞,当你注销时,它也会留在那里,而其他玩家将能够看到它。 现在我正在考虑将Unity作为这款游戏的游戏引擎。 我也做了一些研究,并发现了一些关于RPG游戏创作的教程。 但我还没有find任何有关如何创建沙盒游戏的信息。 更准确地说,如何创建可编辑的世界,以及如何保存对初始游戏世界所做的更改。 你能为我指出正确的方向吗? 我应该search什么? 你会建议我读些什么,这样我就会更加了解我所得到的东西。

重置场景状态

我想知道什么是重新启动游戏的最佳做法,比如在一个平台游戏中,当你死亡的游戏重新启动,你必须重新定位所有的字符或重置陷阱或你有什么。 我想到了这样做的两种方法: 1)你有一些关卡或者场景管理器,可以引用所有对游戏状态变化有反应的东西,比如重启关卡时,你会告诉每个角色重新定位自己或者类似的东西。 2)你有事件。 每个角色或者实体都会使用委托或者函数指针来订阅这个级别的管理者的一个事件,比如“OnLevelRestart”,然后当管理者重新启动这个级别时,会触发这个事件,所有订阅了这个事件的人都会被通知并重置自己的状态。 第一种方法似乎更灵活,因为我有这些对象的引用,我可以发送其他types的消息给他们。 所以如果将来我想做一些与这些对象不同的东西,我已经有能力这样做了。 现在,第二种方法是…在那里,似乎当然不如第一种方式灵活,但除此之外,我没有任何反对。 好的是,管理者不需要知道所有需要重置的对象,所以我可以创建新的实体并注册这些事件(从这个角度来看,它似乎也很灵活)。 我担心未来这些选项的可扩展性和可维护性。 有没有这样做的“最佳做法”? 或只是“什么适合你的项目”? 谢谢。 如果这个问题不符合本网站所要求的要求,我诚挚的道歉。

FSM AIdevise没有接受状态

我是游戏开发和devise的新手,我一直期待着做FSM AIdevise,因为它对我来说似乎很有趣,但是我有一个问题,我在互联网上看不到任何答案。 我已经看到了来自Pac-Man的FSM图,我注意到FSM没有接受状态,这是有道理的,因为敌人总是处于活跃状态,处于不同的状态(游走,追逐吃豆人,吃豆人,在他们的房子里恢复)吃豆人的敌人的密克罗尼西亚联盟是什么显然停止或者吃豆人死亡或水平结局,但是这似乎更像是一个devise决定的蛮力。 我可以想象一些FSM,敌人刚刚“死亡”,这将是一个接受状态,因为它结束了它的过程,但是在许多来源中,我看到一些devise没有接受状态。 有人能解释这是为什么吗? 另外,你会做什么来防止不接受状态FSM?