Questions tagged «logic»

6
我怎么知道我的益智游戏是否总是可能的?
我做了一种益智游戏,目的是摆脱所有白色瓷砖。您可以在问题末尾尝试一下。 每次,该板都是在5 * 5网格上随机放置的白色瓷砖随机生成的。您可以单击该网格上的任意图块,它将切换其颜色以及所有与之接触的图块的颜色。我的困境是我不知道这是否会产生不可能的局面。检查这种事情的最好方法是什么? function newgame() { moves = 0; document.getElementById("moves").innerHTML = "Moves: "+moves; for (var i = 0; i < 25; i++) { if (Math.random() >= 0.5) { $(document.getElementsByClassName('block')[i]).toggleClass("b1 b2") } } } newgame(); function toggle(a,b) { moves += 1; document.getElementById("moves").innerHTML = "Moves: "+moves; $(document.getElementsByClassName('block')[a+(b*5)]).toggleClass("b1 b2"); if (a<4) {$(document.getElementsByClassName('block')[(a+1)+(b*5)]).toggleClass("b1 …


6
将游戏数据/逻辑与渲染分离
我正在使用C ++和OpenGL 2.1编写游戏。我在想如何将数据/逻辑与渲染分开。目前,我使用基类“ Renderable”,该基类提供了一种纯虚拟方法来实现绘图。但是每个对象都有如此专门的代码,只有对象知道如何正确设置着色器制服和组织顶点数组缓冲区数据。最后,我在代码中多次进行gl *函数调用。有没有通用的绘制对象的方法?
21 c++  opengl  rendering  logic  data 

5
游戏逻辑线程与渲染线程之间的同步
一个游戏逻辑和渲染如何分开?我知道这里似乎已经有问题要问,但是答案对我来说并不令人满意。 据我所知,将它们分成不同的线程的目的是使游戏逻辑可以立即开始为下一个滴答运行,而不必等待下一个vsync,在此,渲染最终从swapbuffer调用返回而一直处于阻塞状态。 但是,具体来说,使用什么数据结构来防止游戏逻辑线程和渲染线程之间的竞争状况。大概渲染线程需要访问各种变量来确定要绘制的内容,但是游戏逻辑可以更新这些相同的变量。 是否有实际的标准技术来处理此问题。就像在每次执行游戏逻辑后复制渲染线程所需的数据一样。无论采用什么解决方案,同步的开销还是比仅运行单线程的所有开销都要少?

1
将物理和游戏逻辑与UI代码分开
我正在研究一个简单的基于块的益智游戏。 游戏过程由游戏区域中的许多移动块组成,因此这是一个简单的物理模拟。但是,我认为我的实现还远远不够理想,我想知道您是否可以为我提供任何有关如何更好地实现的建议。 我将代码分为两个区域:游戏逻辑和UI,就像我处理许多益智游戏一样: 游戏逻辑负责游戏的一般规则(例如国际象棋中的正式规则系统) UI显示游戏区域和棋子(例如棋盘和棋子),并负责动画(例如棋子的动画移动) 游戏逻辑将游戏状态表示为逻辑网格,其中每个单位是一个单元格在网格上的宽度/高度。因此,对于宽度为6的网格,可以将宽度为2的块移动四次,直到其与边界碰撞。 UI会获取此网格,然后通过将逻辑大小转换为像素大小(即,将其乘以一个常数)来绘制它。但是,由于游戏几乎没有任何游戏逻辑,因此我的游戏逻辑层[1]除了碰撞检测之外没有其他工作。运作方式如下: 玩家开始拖动一块 用户界面要求游戏逻辑确定该棋子的合法移动区域,并让玩家将其拖到该区域内 玩家放手 UI将样片捕捉到网格(以便它位于有效的逻辑位置) UI告诉游戏逻辑新的逻辑位置(通过mutator方法,我宁愿避免) 我对此不太满意: 我正在为我的游戏逻辑层而不是UI编写单元测试,结果所有棘手的代码都在UI中:阻止该部分与其他对象或边界碰撞并将其捕捉到网格中。 我不喜欢UI告诉游戏逻辑有关新状态的事实,我宁愿让它调用movePieceLeft()方法或类似的方法,就像我在其他游戏中一样,但是我对这种方法没有了解,因为游戏逻辑对用户界面中可能发生的拖动和捕捉一无所知。 我认为最好的办法是摆脱游戏逻辑层,改为实现物理层。我对此有一些疑问: 这样的物理层是常见的,还是让游戏逻辑层更典型地做到这一点? 捕捉到网格和片段拖动代码是属于UI还是物理层? 这样的物理层通常可以与像素大小或某种逻辑单位(例如我的游戏逻辑层)一起使用吗? 我曾经在游戏的代码库中看到过基于事件的碰撞检测,即玩家只需拖动棋子,UI就会顺从地渲染并通知物理系统,物理系统将调用onCollision()方法一旦检测到碰撞,就会在工件上撞上。更常见的是什么?这种方法还是先要求法律流通领域? [1] 层可能不是我所要表达的正确词,但是子系统听起来有些夸大其词,而类却是错误的,因为每一层都可以包含多个类。

3
UPS和FPS-我应限制什么,为什么?
我目前正在使用C ++和SDL2编写游戏,我想知道一件事-限制每秒的帧数(FPS)和/或每秒的更新数(UPS)是否有意义? 我的想法是,如果您限制UPS,则基本上可以控制游戏的速度-如果玩家每次更新移动1px,并且您始终每秒更新30次,则他将以30px / s的速度移动,而您由于每秒的计算量减少,这也可能减轻CPU的负担。如果限制FPS,则每秒的调用次数会减少,因此可以减轻GPU负担。我希望我能正确理解所有这些内容,如果不能,请随时纠正我。 我的问题是-我应该在游戏中限制什么?FPS?UPS?都?都不行 有另一种更好的方法吗?在大多数游戏中这是如何完成的,为什么? 答案非常感谢!
11 game-loop  logic  sdl2 

3
为什么要从渲染中分离对象?
Disclamer:我知道什么是实体系统模式,但我没有使用它。 我已经阅读了很多有关分离对象和渲染的内容。关于游戏逻辑应独立于底层渲染引擎的事实。这一切都很好,很花哨,而且很合理,但同时也会引起很多其他麻烦: 逻辑对象和渲染对象(保持动画,精灵等的状态)之间需要同步 需要向公众开放逻辑对象,以便渲染对象读取逻辑对象的实际状态(通常使逻辑对象容易在笨拙的getter和setter对象中进行转换) 这听起来对我来说不是一个好的解决方案。另一方面,将对象想象为3d(或2d)表示形式非常直观,并且易于维护(也可能封装得更多)。 有没有一种方法可以将图形表示和游戏逻辑保持在一起(避免同步问题),但又抽象了渲染引擎?还是有一种方法可以将游戏逻辑和渲染分开,而不会导致上述缺点? (可能带有示例,我不太擅长理解抽象演讲)

5
逻辑游戏的数据结构/演绎规则/线索的充足集合?
我一直在忙于开发类似于爱因斯坦的《拼图》的逻辑游戏,该逻辑游戏每次重播都会有不同的线索。 您将使用什么数据结构来处理不同的实体(宠物,房屋的颜色,国籍等),演绎规则等,以确保您提供的线索指向独特的解决方案? 我很难思考如何使演绎规则与可能的线索一起发挥作用。任何见识将不胜感激。

1
使用sleep在单个线程中将逻辑/更新与渲染/绘制代码分开
我读过,游戏对象的速度不应该受到FPS的阻碍,而应该基于时间。如何分隔更新/绘制代码以在不限制绘制速率的情况下最大化性能,并提供基于时间的恒定逻辑更新速率? 我当前的伪代码如下 loop { draw(); if (ticksElapsed() > 100) { update(); ticks+= ticksElapsed(); } } 问题在于绘图代码阻碍了update()速率的性能。而且它消耗了100%的cpu,因为如果引发了睡眠,它将同时中断两个绘图/逻辑功能。 我也在使用SDL,它似乎没有vsync选项。我也听说过固定和可变时步的术语,但是我不确定用sleep()如何做到这一点。

4
像Source这样的Engine如何处理实体?
在Source引擎上(它的前身是goldsrc,quake),游戏对象分为两种:世界和实体。世界是地图的几何形状,实体是播放器,粒子,声音,乐谱等(对于Source Engine)。 每个实体都有一个思考功能,该功能执行该实体的所有逻辑。 因此,如果需要处理的所有内容都来自具有think函数的基类,则游戏引擎可以将所有内容存储在列表中,并在每一帧上循环遍历并调用该函数。 乍一看,这个想法是合理的,但是如果游戏中有很多实体,它可能会占用太多资源。 那么,像Source这样的引擎如何处理(处理,更新,绘制等)游戏对象?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.