标签: 2d-games

34
推荐指数
2
解决办法
5万
查看次数

Unity 4.6 - 如何将GUI元素缩放到适合每种分辨率的正确大小

新的Unity 4.6带有一个新的GUI,当我在Unity上更改分辨率时,UI按钮完美缩放,但是当我在Nexus 7设备上测试时,Button看起来太小了.不知道怎么解决这个问题?

Unity 4.6

Android  -  Nexus 7 2Gen

user-interface unity-game-engine 2d-games

28
推荐指数
3
解决办法
7万
查看次数

Canvas vs. SVG游戏

我意识到有很多教程和网站,一切都在回答"哪个更适合游戏应用程序?" 他们都说SVG不适合游戏应用,画布就是.但这让我很困惑.

  • 一旦画布上有东西,它就会被遗忘.
  • SVG元素可以在创建后更改,而不会触及游戏中的任何其他视觉项目.
  • Canvas没有内置动画
  • SVG内置了动画

所以我要说我正在做一个平台游戏.我希望主角走过舞台,背景画得很漂亮.在Canvas中,我要么必须重新创建她的整个hitbox(重新绘制每个移动实体的位置),要么制作一个单独的画布元素并使用可能ctxChar, ctxBG, ctxItems等等.另一方面,SVG内置它.我甚至可以放一个<animate>她的内部标签<use>,改变她的x位置(或通过JS手动改变它)标签,而另一个<animate>标签改变她的精灵.然后永远不必触及背景.

至于同时制作一堆元素的动画,我不知道在Canvas中的速度如何比在SVG中更快.将svg元素放入组中有什么问题?它可以比重绘hitboxes的背景并为所有实体重绘实体本身更慢吗?


编辑:我认为我的真正问题不在于SVG是否可行,而是为什么人们认为它不可行.

svg canvas 2d-games

15
推荐指数
1
解决办法
1万
查看次数

2D Python游戏编程的工具包选项

在Python中开发2D游戏有哪些工具包?我听说过的一个选项是Pygame,但还有什么东西可以做更多的事情吗?模块有哪些好处和坏处?

pygame toolkit libraries python-3.x 2d-games

14
推荐指数
3
解决办法
5931
查看次数

重复时禁用按键事件

有没有办法在重复时禁用按键事件?

我正在开发游戏,当我按下一个键时,玩家进入运行模式并在释放按键时返回直立模式.问题是,对于重复keyPressEvent()事件,会有自动keyReleaseEvent()事件,使玩家在进入运行模式后立即回到站立模式,从而重置步骤(我用于运行动画).

我该怎么做才能取消这个?

c++ qt keyboard-events 2d-games

10
推荐指数
1
解决办法
4786
查看次数

游戏的常见用例图

我开发了一个简单的2D益智游戏(比如"宝石迷阵").它可以以两种模式进行 - "竞选"和"快速游戏"."广告系列"模式有几个级别.退出广告系列级别时,玩家可以保存其进度."快速游戏"模式只生成随机级别,无法保存.在这两种模式下,玩家都可以暂停游戏并显示菜单.完成一个级别(无论游戏模式)后,统计窗口将显示退出和下一级别的按钮(如果是"活动模式").

主菜单结构:

  • 继续(如果有保存的进度)
  • 新游戏(游戏从第一级开始;清除进度)
  • 快速游戏
  • 出口

暂停菜单结构:

  • 继续(恢复比赛)
  • 返回(进入主菜单并保存进度,如果它是"广告系列"模式)

我必须创建一个用例图,但我有困难.我已经为基于Windows的软件(有表格,按钮,文本框等)制作了用例图,但从来没有用于游戏.应该如何看待视频游戏的用例图(尤其是我的游戏类型)之后我必须创建活动图来详细解释整个过程......如果它对用例图很重要.

diagram use-case 2d-games

9
推荐指数
1
解决办法
2万
查看次数

如何使Sprite遵循贝塞尔曲线

我是Objective-c和sprite kit的新手,但我已经做了一段时间的游戏开发.我目前正在进行2D游戏,我的敌人船只在屏幕上从右向左移动.我一直在关注游戏不同部分的教程,然后在必要时添加它.我找到了一个教程,其中游戏中的敌人遵循bezier路径并且我已经设法在我的游戏中实现这一点但是因为我是bezier曲线的新手我不完全理解它们并且算法使我的精灵从上到下移动但我需要它们从左到右.

我已经包含了我用来将贝塞尔曲线添加到我的精灵的代码片段,有关我如何让它们从右到左而不是从上到下移动的任何建议.

CGMutablePathRef cgpath = CGPathCreateMutable();

        float xStart = [self getRandomNumberBetween:0+asteroid.size.width to:self.frame.size.width-asteroid.size.width];
        float xEnd = [self getRandomNumberBetween:0+asteroid.size.width to:self.frame.size.width-asteroid.size.width];
        float cp1X =[self getRandomNumberBetween:0+asteroid.size.width to:self.frame.size.width-asteroid.size.width];
        float cp1y = [self getRandomNumberBetween:0+asteroid.size.width to:self.frame.size.width-asteroid.size.height];
        float cp2x = [self getRandomNumberBetween:0+asteroid.size.width to:self.frame.size.width-asteroid.size.width];
        float cp2Y = [self getRandomNumberBetween:0 to:cp1y];

        CGPoint s = CGPointMake(xStart, 1024.0);
        CGPoint e = CGPointMake(xEnd, -100);
        CGPoint cp1 = CGPointMake(cp1X, cp1y);
        CGPoint cp2 = CGPointMake(cp2x, cp2Y);
        CGPathMoveToPoint(cgpath, NULL, s.x, s.y);
        CGPathAddCurveToPoint(cgpath, NULL, cp1.x, cp1.y, cp2.x, cp2.y, e.x, e.y);

        SKAction *enemyCurve = [SKAction followPath:cgpath asOffset:NO …
Run Code Online (Sandbox Code Playgroud)

bezier 2d-games sprite-kit

8
推荐指数
1
解决办法
2240
查看次数

WebGL中批量调用的最快方法

我正在尝试为我的2D游戏引擎重写基于画布的渲染.我已经取得了很好的进展,可以很好地渲染纹理到webgl上下文,完成缩放,旋转和混合.但我的表现很糟糕.在我的测试笔记本电脑上,我可以获得30 fps的vanilla 2d画布,同时屏幕上有1,000个实体; 在WebGL中,我在屏幕上获得了30个fps,500个实体.我希望情况会逆转!

我有一种潜在的怀疑,罪魁祸首就是Float32Array我正在折腾的所有缓冲垃圾.这是我的渲染代码:

// boilerplate code and obj coordinates

// grab gl context
var canvas = sys.canvas;
var gl = sys.webgl;
var program = sys.glProgram;

// width and height
var scale = sys.scale;
var tileWidthScaled = Math.floor(tileWidth * scale);
var tileHeightScaled = Math.floor(tileHeight * scale);
var normalizedWidth = tileWidthScaled / this.width;
var normalizedHeight = tileHeightScaled / this.height;

var worldX = targetX * scale;
var worldY = targetY * scale;

this.bindGLBuffer(gl, this.vertexBuffer, sys.glWorldLocation);
this.bufferGLRectangle(gl, worldX, worldY, tileWidthScaled, …
Run Code Online (Sandbox Code Playgroud)

javascript performance webgl html5-canvas 2d-games

7
推荐指数
1
解决办法
4431
查看次数

如何在Delphi XE5下找到解决方案

我开始在Delphi XE5 for iOS下开发游戏.我对Firemonkey的Resolution功能有疑问.

当我打开屏幕并检查iPhone的分辨率时,我得到320x480.但iPhone 4和5的原生分辨率翻了一番.我在官方Delphi页面上发现FireMonkey通过"Resolution"重新计算屏幕,这是用于Retina显示屏2.

我认为这对于常规应用程序来说很酷,但是当你开始做游戏而你想通过代码操作图像时会带来奇怪的情况.

我的问题是 - 有没有办法找到实际的分辨率值或至少是什么是实际的设备类型(iPhone,iPad?)

谢谢

delphi ios firemonkey 2d-games delphi-xe5

7
推荐指数
1
解决办法
1774
查看次数

AABB碰撞分辨率滑动侧面

因此,我正在尝试为我的游戏引擎制作一个简单的物理引擎,从而重新发明轮子(并学习很多东西).我一直在网上搜索,尝试(并失败)解决我当前的问题.关于这个问题有很多资源,但我发现的那些资源似乎都不适用于我的案例.

短暂的问题:当两个矩形碰撞时,碰撞分辨率在某些角上无法正常工作.失败的方式因矩形的大小而异.我正在寻找的是碰撞的"最短重叠"解决方案或另一个相当简单的解决方案(我愿意接受建议!).(向下滚动以获得更好的解释和插图).

警告:以下代码可能效率不高......

首先,这是我的物理循环.它只是循环遍历所有游戏实体并检查它们是否与任何其他游戏实体发生冲突.它效率不高(n ^ 2和所有这些),但它现在有效.

updatePhysics: function(step) {
  // Loop through entities and update positions based on velocities
  for (var entityID in Vroom.entityList) {
    var entity = Vroom.entityList[entityID];
    if (entity.physicsEnabled) {
      switch (entity.entityType) {
        case VroomEntity.KINEMATIC:
          entity.pos.x += entity.vel.x * step;
          entity.pos.y += entity.vel.y * step;
          break;

        case VroomEntity.DYNAMIC:
          // Dynamic stuff
          break;
      }
    }
  }
  // Loop through entities and detect collisions. Resolve collisions as they are detected.
  for (var entityID in Vroom.entityList) {
    var entity = …
Run Code Online (Sandbox Code Playgroud)

javascript html5 game-engine game-physics 2d-games

7
推荐指数
1
解决办法
819
查看次数