Questions tagged «platformer»

一种动作游戏,专注于基于平台的动作。它同样存在于2D和3D游戏世界中。

5
基于Tile的2D平台平台中的45°坡度
我想在基于图块的平台游戏中使用简单的45°坡度,但是我似乎无法将算法推倒。请看一下代码和视频,也许我错过了明显的地方? //collisionRectangle is the collision rectangle of the player with //origin at the top left and width and height //wantedPosition is the new position the player will be set to. //this is determined elsewhere by checking the bottom center point of the players rect if(_leftSlope || _rightSlope) { //Test bottom …
12 xna  c#  xna-4.0  platformer 

4
使玩家平稳地上楼梯
我有一个2D平台游戏,其中玩家始终向右行驶,但是地形并不总是水平的。例: 我实现了一个边界框碰撞系统,该系统仅检查与玩家框和其他方块的交点,以防止遇到大方块时玩家无法奔跑,因此必须跳下去,但是当我上楼梯时,我希望他就像他在水平地面上一样平稳运行。使用碰撞系统,您必须跳楼梯才能通过! 我考虑过要在楼梯的边缘之间生成一条线,并在那条线上强加玩家移动……您如何看待?还有更聪明的事情吗?

2
如何在2D平台游戏机中使角色在不平坦的墙壁上行走?
我想要一个可玩的角色,他可以以任何角度(包括侧身和倒置)在有机表面上“行走”。通过具有倾斜和弯曲特征的“有机”水准仪代替90度角的直线。 我目前正在从事AS3(中等业余经验)的工作,并使用Nape(几乎是新手)来进行基于重力的基本物理学,该行走机械手显然是一个例外。 有没有可能使用Nape约束的程序方法来进行这种步行动作?还是最好按照水平面的轮廓创建明确的步行“路径”,并使用它们来约束步行运动?

2
Microsoft XNA Platformer示例,是否正确实施了碰撞检测?
Microsoft提供的示例似乎(从我所看到的)碰撞检测将有一个小错误。当用户与不可通过的图块碰撞时,将计算相交的深度。深度值X和Y中较小的一个用于固定用户的位置,因此它不再与图块碰撞。但是,如果用户沿对角线行驶,这是否可能导致用户无法准确地到达角色首先与图块发生碰撞的位置? 我可能是错的,但这只是我的看法。 private void HandleCollisions() { // Get the player's bounding rectangle and find neighboring tiles. Rectangle bounds = BoundingRectangle; int leftTile = (int)Math.Floor((float)bounds.Left / Tile.Width); int rightTile = (int)Math.Ceiling(((float)bounds.Right / Tile.Width)) - 1; int topTile = (int)Math.Floor((float)bounds.Top / Tile.Height); int bottomTile = (int)Math.Ceiling(((float)bounds.Bottom / Tile.Height)) - 1; // Reset …

4
玩家向上移动,他是跳跃还是攀爬?
在其中带有梯子的基于2D物理的平台游戏中,您如何确定玩家向上移动是由跳跃引起还是由他爬梯引起的,从而使您知道要播放哪种动画? 通常,方向向量显然不足以确定要播放的动画:您还如何确定运动原因(因此您知道要使用的正确精灵)?

1
多人平台游戏-服务器上的单个客户端通常是否需要服务器更正?
我目前正在开发一个相当简单的多人平台游戏。我阅读了很多有关隐藏延迟的技术的文章,但是仍然无法理解某些概念。我觉得这个话题非常有趣,喜欢自己尝试一些想法,但我认为询问gamedev stackexchange对于我的问题会更有效。我将尽力描述我的当前状况以及在此过程中出现了什么问题。 现在,我只想让一个播放器与服务器同步。从理论上讲,我假设一个具有客户端预测功能的玩家不需要服务器修正,因为没有外部因素会影响他的动作。因此,我的原型目前只有一个播放器与服务器同步,而没有发送服务器更正。 如果您熟悉游戏网络,我认为您可能会跳过上下文部分,尽管在此过程中我也可能做错了什么。 客户端循环(每帧一次,每〜16.67ms一次) 简化的客户端循环如下所示: 检查本地输入(WASD)并将其打包为操作(例如Type=MoveLeft, Time=132.0902, ID=15)。我们保留打包的操作,以便最终在以后发送它们。此外,我们将所需的动作直接应用于游戏的本地物理模拟。例如,如果我们有一个MoveLeft动作,我们会向玩家的速度向左施加一个力。 检查发送动作。为了防止滥用客户端的带宽,请仅按特定间隔(例如30ms)发送打包的操作。 应用服务器修改。在某个时候,这将处理服务器接收到的增量和更正,并将其应用于游戏的本地模拟。对于此特定问题,不使用。 更新本地物理。在主播放器上运行物理循环。基本上,这是客户端对玩家运动的预测。这会增加玩家的速度引力,将玩家的速度应用到他的位置,修复沿途的碰撞等。我应该指定物理模拟始终以固定的增量秒执行(根据实际增量秒多次调用) 。 我跳过了有关物理学和其他部分的一些特定详细信息,因为我认为这些不是问题所必需的,但是请随时让我知道它们是否与问题相关。 服务器循环(每15ms) 简化的服务器循环如下所示: 处理动作。检查从客户端收到的操作包,并将其应用于服务器物理仿真。例如,我们可以收到5个MoveLeft动作,然后将力施加到速度5次。重要的是要注意,整个动作包是在一个“框架”上执行的,与客户端在动作发生后立即应用它相反。 更新游戏逻辑。我们会更新游戏物理性,移动玩家并修复碰撞等。我们还会打包以后碰巧发送给玩家的所有重要事件(例如,玩家的健康状况下降,玩家死亡等)。 发送更正。如果他们最近改变了,我们会定期(例如,每35毫秒发送一次)将差值发送给其他玩家(例如,玩家的位置,健康状况等)。该部分目前尚未实现,因为我希望单个播放器的模拟在客户端和服务器上给出相同的结果而无需更正,以确保客户端的预测工作正常。 问题 当前的系统在简单的情况下仍然可以正常工作,而令我惊讶的是它在简单的水平移动下给出了非常相似的结果(我相信,这种误差是由于浮点精度误差引起的): 请忽略原型图形。白色矩形=播放器,红色矩形=障碍物,蓝色=背景 但是,在进行时间敏感的动作(例如跳跃和移动到孤立的障碍物附近)之后,出现同步错误: 从理论上讲,我希望两者总是能得到相同的结果,因为没有任何外部因素影响客户的立场。不过,在实践中,我认为我理解问题所在。 由于围绕这样的障碍物跳跃非常取决于玩家的时机,因此将速度应用于位置时的微小变化将对结果产生影响(例如,客户可以及时移开以避免与障碍物,而服务器会在稍后接收到整个动作包时执行该操作,并停留在障碍物上一小段时间,从而更改最终结果)。客户端和服务器处理方式之间的区别主要在于,客户端在发生所有操作时都会执行所有操作,而服务器在接收到它们时会批量执行所有操作。 问题 如此长的语境最终引发了我的问题(感谢您阅读到目前为止):即使只有一个播放器与服务器同步,要求服务器更正是否正常,还是应该在某些对时间敏感的情况下使用某些技术来避免不同步? ? 我已经想到了某些可能的解决方案,其中一些我不太满意: 实施服务器校正。只需假设这是正常行为并纠正错误即可。无论如何,我都想实现它,但是我只是想确保到目前为止所做的事情是可以接受的。 使用提供的客户端时间来应用所需的操作。我想这与滞后补偿类似,需要“及时返回”并检查运动。有点像应用服务器更正,回到过去,然后重新应用下一个操作。我真的不喜欢这个主意。它看起来很复杂,资源昂贵,并且需要信任客户的给定时间(尽管我确实打算真正检查时间是否相对合法)。 向GameDevelopment StackExchange提出一个很棒的新想法,它将解决我的所有问题。 我才刚刚进入游戏网络世界,所以请随时纠正/批评/侮辱上述任何概念,或者提供一些想法/资源,这些资源可以帮助我在“网络奇妙世界”中发展。如果可以在其他地方找到答案,请原谅我,但我失败了。 非常感谢您的宝贵时间。

1
gluLookAt如何工作?
据我了解, gluLookAt( eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x, up_y, up_z ); 等效于: glRotatef(B, 0.0, 0.0, 1.0); glRotatef(A, wx, wy, wz); glTranslatef(-eye_x, -eye_y, -eye_z); 但是当我打印出ModelView矩阵时,对的调用glTranslatef()似乎无法正常工作。这是代码片段: #include <stdlib.h> #include <stdio.h> #include <GL/glut.h> #include <iomanip> #include <iostream> #include <string> using namespace std; static const int Rx = 0; static const int Ry …

8
如何防止平台游戏角色的角色夹在墙砖上?
目前,我有一个带有地形瓷砖的平台游戏(图形是从Cave Story借来的)。该游戏是使用XNA从头开始编写的,因此我没有使用现有的引擎或物理引擎。 瓦片碰撞的描述几乎完全与此答案中描述的一样(对于矩形和圆形使用简单的SAT),并且一切正常。 除非玩家摔倒时撞到墙壁。在这种情况下,他们会抓住瓷砖,开始以为自己撞到了实际上不存在的地板或天花板。 在此屏幕截图中,播放器向右移动并下降。因此,在移动之后,将检查碰撞-首先,发现玩家角色正在与地板上第3个瓷砖碰撞,并向上推。其次,发现他与旁边的瓷砖发生碰撞,并向侧面推开-最终结果是玩家角色认为自己在地上并且没有跌倒,并且只要碰到瓷砖就“抓住”瓷砖。 我可以通过定义从上到下的瓷砖来解决此问题,这使他可以平稳地跌倒,但是相反的情况发生了,当他向上跳到墙上时,他会撞到一个不存在的天花板。 我应该如何解决这个问题,以使玩家角色可以顺着墙倒下?

2
英雄/角色精灵大小与图块大小相比?
因此,我正在制作一个简单的平台游戏,其中Hero的大小为16x16,但tile的大小为16x16。听起来不错吧?但是我的游戏窗口/世界是800x416,与之相比,这使得Hero真的很小。这确实让我感到惊讶,但是鉴于Ive在成为新发现之前从未做过平台游戏。 在平台游戏中是否有规模规则? 我想让我的游戏窗口保持其大小(800x416),因为游戏涉及大关卡。但是我的英雄应该有多大? 我希望我对这个问题很清楚,也感谢任何见解。 谢谢


5
如何在平台游戏中轻松实现挥杆动作?
我正在开发一款游戏,玩家可以使用绳索摇摆(就像《蜘蛛侠》或《仿生突击队》一样),并且在实现此行为时遇到问题。谁能帮助我做到这一点,我的意思是物理公式等等。到目前为止,我已经提出了3个想法。一种是使用弹簧,但是会消耗大量时间,有时甚至会跳动。另外两个正在尝试计算下一步(一个通过计算势能,一个通过计算扭矩),并且每当演员试图摆动时,两者几乎都会崩溃。 这是我编写的用于计算扭矩的代码: float dx = Runner->getPosition().x - ancher.x; float dy = Runner->getPosition().y - ancher.y; float t0 = atan2(dy,dx); //my current angle float k = ((dy) *vx - (dx) * vy) / (dx * dx+dy * dy); //previus angular velocity k -= gravity * cos(t0) *dt; // new angular velocity (gravity …

2
用C ++ / SDL制作2D Platformer。寻找教程/示例/资源[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 去年关闭。 我有很多C ++经验,但是没有游戏编程经验。今年夏天,我计划使用C ++ / SDL从头开始创建2D平台游戏,以提供学习体验。我正在寻找尽可能多的资源来帮助我入门。好的源代码,教程,任何东西。 我发现的最好的教程之一是已故的Florian Hufsky的非活跃的Jump'n'run开发教程。任何类似的教程吗?
9 c++  2d  sdl  platformer 
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.