Coin Dash

游戏展示

Coin Dash!

游戏开发

游戏开发是复杂的,涉及到各种各样的知识和技能。为了创造一款现代游戏,你需要大量的基础技术才能创造出真正的游戏。想象一下,在你开始编程之前,你必须建造自己的电脑,编写自己的操作系统。如果你真的需要从头开始并创造你所需要的一切,游戏开发将会非常类似于此。

此外,每个游戏都有一些共同的需求。例如,不管游戏是什么,它都需要在屏幕上绘制东西。如果要做这些的代码已经写好了,那么重用它比为每个游戏重新创建它更有意义。这就是游戏框架和引擎的用武之地。

游戏框架 是一组带有辅助代码的库,帮助构建游戏的基本部分。它不一定提供所有的部分,而且您可能仍然需要编写大量的代码来将所有的部分联系在一起。因此,构建一个游戏需要从其他工具中导入内容,比如那些用于创建动画或3D模型的工具。

使用 游戏引擎 可以让开发者专注于构建他们的游戏,而不是创建所有需要的底层框架。对于小型或独立开发者来说,这可能意味着在一年而不是三年的开发后发行游戏,甚至是从未发行过游戏。
以下是游戏引擎提供的一些主要功能:

  • 渲染(2D和3D): 渲染是在玩家的屏幕上显示游戏的过程。一个好的渲染管道必须考虑到现代 GPU 的支持,高分辨率的显示,以及像灯光、透视和视口这样的效果,同时保持一个非常高的帧速率。
  • 物理: 虽然这是一个非常普遍的需求,但构建一个健壮而准确的物理引擎是一项艰巨的任务。大多数游戏都需要某种碰撞检测和响应系统,许多游戏都需要物理模拟,但很少有开发者愿意承担编写这样的游戏的任务,特别是如果他们曾经尝试过这样做的话。
  • 平台支持: 在今天的市场中,大多数开发者都希望能够在多个平台上发布他们的游戏,例如主机,手机,PC 和/或网络。游戏引擎提供了一个统一的导出过程,可以在多个平台上发布,而不需要重写游戏代码或支持多个版本。
  • 通用开发环境: 通过使用相同的统一界面制作多个游戏,你不必每次开始一个新项目时都重新学习一个新的工作流程。”

此外,还会有一些工具来帮助你实现一些功能,比如联网、简化处理图像和声音、动画、调试、关卡创建等等。通常,游戏引擎将包括从其他工具(如用于创建动画或 3D模型的工具)导入内容的能力。

使用游戏引擎可以让开发者专注于构建他们的游戏,而不是创建所有的底层内容。

框架需要使它工作。对于小型或独立开发者来说,这可能意味着在一年而不是三年的开发后发行游戏,甚至是从未发行过游戏。

现在市场上有很多流行的游戏引擎,例如 Unity, Unreal Engine, GameMaker Studio 等等。需要注意的一个重要事实是,大多数流行的游戏引擎都是商业产品。他们可能需要或不需要任何财务投资来开始,但如果你的游戏赚钱,他们将需要一些许可和/或版税。无论您选择哪种引擎,您都需要仔细阅读用户协议,并确保您了解您是什么以及不允许您使用该引擎,以及您可能要承担的隐藏成本(如果有的话)。

另一方面,也有一些非商业性和开源的引擎,比如 Godot 游戏引擎。

Godot

Godot 是一个功能齐全的现代游戏引擎,提供了上一节和更多内容中描述的所有功能。它也是完全免费和开源的,在非常宽松的 MIT 许可下发布。这意味着你的游戏没有费用,没有隐藏成本,也没有版税。你使用 Godot 所创造的一切都是属于你自己的,这与许多需要持续合同关系的商业游戏引擎不同。对于许多开发人员来说,这非常有吸引力。

如果您不熟悉开源、社区驱动开发的概念,那么您可能会觉得奇怪。然而,就像 Linux 内核、Firefox 浏览器和许多其他非常著名的软件一样,Godot 并不是由公司作为商业产品开发的。相反,热情的开发人员组成了一个专门的社区,贡献他们的时间和专业知识来构建引擎、测试和修复 bug、生成文档等等。

作为一名游戏开发者,使用 Godot 的好处是巨大的。因为它不受商业许可的限制,所以你可以完全控制游戏的发行方式和发行地点。许多商业游戏引擎都限制了你可以制作的项目类型,或者需要更昂贵的许可证才能在某些类别(如赌博)中制作游戏。

Godot 的开源特性也意味着它具有商业游戏引擎所不具备的透明度。例如,如果您发现某个特定的引擎特性不能完全满足您的需求,您可以自由地修改 引擎本身并添加您需要的新特性,不需要任何权限。这在调试大型项目时也非常有用,因为您可以完全访问引擎的内部工作。

Node

节点是在 Godot 中创建游戏的基本构建块。 节点是可以代表各种专用游戏功能的对象。 给定类型的节点可能会显示图形,播放动画或表示对象的 3D 模型。 该节点还包含属性的集合,允许您自定义其行为。 您添加到项目中的哪些节点取决于所需的功能。 这是一个模块化系统,旨在为您提供构建游戏对象的灵活性。

在您的项目中,您添加的节点被组织成树状结构。 在树中,将节点添加为其他节点的子代。 一个特定的节点可以有任意数量的子节点,但只能有一个父节点。 将一组节点收集到树中时,它称为 scene (场景),该树称为 scenes(场景树)

Coin Dash (金币冲冲冲)

Project Setup

  • Project menu > Project Settings
    • Display
      • Window
        • Size
          • Width: 480
          • Height: 720
      • Stretch
        • Mode: 2d
        • Aspect: keep
    • Rendering
      • Quality
        • 2d
          • Use Pixel Snap: On

Player Scene

  • Scene
    • Area2D: Player & not selectable
      • AnimatedSprite
      • CollisionShape2D
  • Inspector
    • AnimatedSprite
      • Frames: New SpriteFrames
        • Animations
          • hurt
          • idle
          • run
        • Speed(FPS):
          • 8
      • Playing
        • On: true
      • Offset
        • x: 0
        • y: -5
      • Scale
        • x: 3
        • y: 3
    • CollisionShape2D
      • Shape
        • RectangleShape2D
  • Player
    • Script: Player.cs
1
using Godot;
2
using System;
3
4
public class Player : Area2D
5
{
6
    // How fast the player will move (pixels/sec).
7
    [Export]
8
    public int Speed = 400;
9
10
    // Size of the game window.
11
    private Vector2 screenSize;
12
    // The player's movement vector.
13
    private Vector2 velocity;
14
15
    public override void _Ready()
16
    {
17
        screenSize = GetViewport().GetSize();
18
    }
19
20
    public override void _Process(float delta)
21
    {
22
        _GetInput();
23
24
        Position += velocity * delta;
25
26
        Position = new Vector2(
27
            x: Mathf.Clamp(Position.x, 0, screenSize.x),
28
            y: Mathf.Clamp(Position.y, 0, screenSize.y)
29
        );
30
31
        var animatedSprite = GetNode<AnimatedSprite>("AnimatedSprite");
32
33
        if (velocity.Length() > 0)
34
        {
35
            animatedSprite.Animation = "run";
36
            animatedSprite.FlipH = velocity.x < 0;
37
        }
38
        else
39
        {
40
            animatedSprite.Animation = "idle";
41
        }
42
    }
43
44
    private void _GetInput()
45
    {
46
        velocity = new Vector2();
47
48
        if (Input.IsActionPressed("ui_right"))
49
        {
50
            velocity.x += 1;
51
        }
52
53
        if (Input.IsActionPressed("ui_left"))
54
        {
55
            velocity.x -= 1;
56
        }
57
58
        if (Input.IsActionPressed("ui_down"))
59
        {
60
            velocity.y += 1;
61
        }
62
63
        if (Input.IsActionPressed("ui_up"))
64
        {
65
            velocity.y -= 1;
66
        }
67
68
        if (velocity.Length() > 0)
69
        {
70
            velocity = velocity.Normalized() * Speed;
71
        }
72
    }
73
}

未完待续

小结

参考:

  1. Godot Game Engine Projects

下载

游戏

Release: https://github.com/GameDevLog/GameDevLogTemplete/releases

源码

GitHub: https://github.com/GameDevLog/GameDevLogTemplete

找到游戏列表对应的 GameDevLog

本文标题:Coin Dash

文章作者:iOSDevLog

发布时间:2020年01月02日 - 15:39:10

最后更新:2020年01月02日 - 23:13:14

原始链接:https://game.iosdevlog.com/2020/01/02/Coin-Dash/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

iOSDevLog wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!