只有美九一个人

使用 OpenGL ES 和代码处理 FSGL 库的结果:

接下来我将描述它是如何编程的,以及如何解决各种有趣问题。

首先,我们将初始化 OpenGL ES 上下文,正如我在上一篇文章中所写的那样。此外,我们将仅考虑渲染和代码的简要描述。

黑客帝国正在注视着你

视频中 Miku 的这个形象由三角形组成。要在 OpenGL 中绘制三角形,需要指定坐标为 x、y、z 的三个点。在 OpenGL 上下文的 2D 坐标中。
由于我们需要绘制包含 3D 坐标的图形,因此需要使用投影矩阵。我们还需要旋转、放大或任何我们想要对模型执行的操作——为此,使用了模型矩阵。 OpenGL 中没有相机的概念;事实上,对象围绕静态相机旋转。为此,使用了视图矩阵

简化 OpenGL ES 的实现它不包含矩阵数据。您可以使用添加缺失功能的库,例如 GLM

着色器

为了允许开发人员以任何方式绘制任何内容,OpenGL ES 必须实现顶点和片段着色器。顶点着色器必须接收渲染坐标作为输入,使用矩阵执行转换,并将坐标传递给 gl_Position。片段或像素着色器 –已经绘制颜色/纹理、应用叠加等。

我用 GLSL 编写了着色器。在我当前的实现中,着色器作为 C 字符串直接内置到主应用程序代码中。

缓冲区

顶点缓冲区包含顶点(vertices)的坐标;该缓冲区还包含纹理的坐标以及着色器所需的其他数据。生成顶点缓冲区后,需要将指针绑定到顶点着色器的数据。这是通过 glVertexAttribPointer 命令完成的,您需要在其中指定元素数量、指向数据开头的指针以及用于遍历缓冲区的步长。在我的实现中,完成了像素着色器的顶点坐标和纹理坐标的绑定。不过,值得一提的是,数据(纹理坐标)到片段着色器的传输是通过顶点着色器进行的。为了实现这一点,使用variing声明坐标。

这样OpenGL就知道以什么顺序绘制三角形的点–您将需要一个索引缓冲区(索引)。索引缓冲区包含数组中的顶点编号;使用三个这样的索引,可以获得一个三角形。

纹理

首先您需要加载/生成 OpenGL 纹理。为此,我使用了 SDL_LoadBMP,纹理是从 bmp 文件加载的。不过,值得注意的是,只有 24 位 BMP 适合,并且其中的颜色不是按通常的 RGB 顺序存储,而是以 BGR 存储。即加载后需要将红色通道替换为蓝色通道
纹理坐标以以下格式指定: UV,即只需要传递两个坐标即可。纹理输出在片段着色器中完成。为此,您需要将纹理绑定到片段着色器中。

没什么多余的

因为,根据我们的指示,OpenGL 通过 2D 绘制 3D ——然后实现深度,并选择不可见的三角形–您需要使用剔除和深度缓冲区(Z-Buffer)。在我的实现中,我设法避免使用两个命令手动生成深度缓冲区:glEnable(GL_DEPTH_TEST);和选择 glEnable(GL_CULL_FACE);
另外一定要检查投影矩阵的近平面是否大于零,因为使用近平面的空值检查深度将不起作用。

渲染

要使用有意识的东西填充顶点缓冲区、索引缓冲区,例如 Miku 模型,您需要加载此模型。为此,我使用了 assimp 库。 Miku被放置在Wavefront OBJ格式文件中,使用assimp加载,并实现了assimp到顶点和索引缓冲区的数据转换。

渲染分几个阶段进行:

  1. 使用模型矩阵旋转来旋转 Miku
  2. 清除屏幕和深度缓冲区
  3. 使用 glDrawElements 命令绘制三角形。

下一阶段–使用 Emscripten 在 WebGL 中实现渲染。

源代码:
https://github.com/demensdeum/OpenGLES3-Experiments/tree/master/8-sdl-gles-obj-textured-assimp-miku
型号:
https://sketchfab.com/models/7310aaeb8370428e966bdcff414273e7

 

投影它

在 3D 中绘制了一个红色茶壶后,我认为我有责任简要描述它是如何完成的。

现代OpenGL不绘制3D,它只在2D屏幕坐标中绘制三角形、点等。
要使用 OpenGL 至少输出一些内容,您需要提供一个顶点缓冲区,编写一个顶点着色器,将所有必要的矩阵(投影、模型、视图)添加到顶点着色器,将所有输入数据与着色器,调用OpenGL中的渲染方法。是不是看起来很简单?


好的,什么是顶点缓冲区?要绘制的坐标列表(x,y,z)
顶点着色器告诉 GPU 要绘制什么坐标。
像素着色器告诉绘制什么(颜色、纹理、混合等)
矩阵将 3D 坐标转换为可以渲染的 2D OpenGL 坐标

在接下来的文章中,我将提供代码示例和结果。

SDL2 – OpenGL ES

I love Panda3D game engine. But right now this engine is very hard to compile and debug on Microsoft Windows operation system. So as I said some time ago, I begin to develop my own graphics library. Right now it’s based on OpenGL ES and SDL2.
In this article I am going to tell how to initialize OpenGL ES context and how SDL2 helps in this task. We are going to show nothing.

King Nothing

First of all you need to install OpenGL ES3 – GLES 3 libraries. This operation is platform dependant, for Ubuntu Linux you can just type sudo apt-get install libgles2-mesa-dev. To work with OpenGL you need to initialize OpenGL context. There is many ways to do that, by using one of libraries – SDL2, GLFW, GLFM etc. Actually there is no one right way to initialize OpenGL context, but I chose SDL2 because it’s cross-platform solution, code will look same for Windows/*nix/HTML5/iOS/Android/etc.

To install sdl2 on Ubuntu use this command sudo apt-get install libsdl2-dev

So here is OpenGL context initialization code with SDL2:

    SDL_Window *window = SDL_CreateWindow(
            "SDL2 - OGLES",
            SDL_WINDOWPOS_UNDEFINED,
            SDL_WINDOWPOS_UNDEFINED,
            640,
            480,
            SDL_WINDOW_OPENGL
            );
	    

    SDL_GLContext glContext = SDL_GL_CreateContext(window);

After that, you can use any OpenGL calls in that context.

Here is example code for this article:
https://github.com/demensdeum/OpenGLES3-Experiments/tree/master/3sdl-gles
https://github.com/demensdeum/OpenGLES3-Experiments/blob/master/3sdl-gles/sdlgles.cpp

You can build and test it with command cmake . && make && ./SDLGles

火焰钢芯

死亡面具最新版本的屏幕截图:

看起来像一百万美元吧?

< /块引用>

<脚本异步 src="//s.imgur.com/min/embed.js" charset="utf-8">

重命名、拆分

Flame Steel 引擎库已重命名为 Flame Steel Core,Game Toolkit 已分为 SDL、Panda3D(桌面)和 Web (ThreeJS) 库。如果有钢球可用于使用 Flame Steel 库进行组装,那么您必须首先选择并组装您需要的钢球。

Github:

https://github.com/demensdeum/Death-Mask
https://github.com/demensdeum/FlameSteelCore
https://github.com/demensdeum/FlameSteelEngineGameToolkit
https://github.com/demensdeum/FlameSteelEngineGameToolkitDesktop

已过时:

https://github.com/demensdeum/FlameSteelEngineGameToolkitSDL
https://github.com/demensdeum/FlameSteelEngineGameToolkitWeb

量子黑客 RSA

有一天,我编写了 RSA 公钥加密算法的实现。我还对这个算法做了一个简单的修改,所以我想写一篇关于这个主题的简短说明。 RSA 的防篡改基于因式分解问题。因式分解——多么可怕的词啊…

这并没有那么可怕

事实上,在创建密钥的第一阶段,我们取两个随机数,但这些数字只能被它们本身和一个“整除”。 素数数字。
我们称它们为pq。接下来我们应该得到数字n = p *q。它将用于进一步生成密钥,这些密钥又将用于加密和解密消息。在私钥和公钥的最终版本中,数字n将原样转移。
假设我们手中有一个 RSA 密钥和一条加密消息。我们从密钥中取出数字n并开始破解

因式分解 n

因式分解–将数字分解为素数因子。首先,我们从密钥中取出数字n(在真正的密钥上,您可以使用 openssl 来完成),假设n = 35。然后我们将其分解为简单的因子n = 35 = 5 * 7,这就是我们的pq。现在您可以使用收到的pq重新生成密钥,解密消息并加密它,同时确保原始作者的可见性。

量子位没那么简单

真的有可能那么容易破解任何 RSA 吗?事实上不是,数字pq被故意取大,使得经典计算机上的因式分解任务需要很长的时间(某种程度上10年)< br/>然而,使用 Shor 的量子算法,可以在很短的时间内分解一个数字。目前,有关该主题的文章规定了乘以给定数字的时间,即几乎是立即的。为了让 Shor 算法发挥作用,需要实现具有大量量子位的量子计算机。 2001 年,IBM 使用 7 个量子位对数字 15 进行因式分解。所以这一刻我们还需要等待很长时间,到时候我们就已经转向后量子加密算法了。

触摸短时间

Peter Shore 谈论他的因式分解算法

要在量子模拟器上尝试 Shor 算法,您可以安装 ProjectQ,其示例包括 shor.py 的实现,允许您对用户输入的数字进行因式分解。在模拟器上,执行时间令人沮丧,但这似乎是对量子计算机操作的有趣且好玩的模拟。

文章:
http://www.pagedon.com/rsa-explained-simply/my_programming/
http://southernpacificreview.com/2014/01/06/rsa-key-generation-example/
https://0day.work/how-i-recovered-your-private-key-or-why-small-keys-are-bad/

RSA的Python实现:
https://github.com/demensdeum/RSA-Python

Russian Quantum Hack and Number Generator

[Translation may be, some day]

Эта заметка увеличит длину вашего резюме на 5 см!

Без лишних слов о крутости квантовых компьютеров и всего такого, сегодня я покажу как сделать генератор чисел на реальном квантовом процессоре IBM.
Для этого мы будем использовать всего один кубит, фреймворк для разработки квантового ПО для python – ProjectQ, и 16 кубитовый процессор от IBM, онлайн доступ к которому открыт любому желающему по программе IBM Quantum Experience.

Установка ProjectQ

Для начала у вас должен быть Linux, Python и pip. Какие либо инструкции по установке этих базовых вещей приводить бесполезно, т.к. в любом случае инструкции устареют через неделю, поэтому просто найдите гайд по установке на официальном сайте. Далее устанавливаем ProjectQ, гайд по установке приведен в документации. На данный момент все свелось к установке пакета ProjectQ через pip, одной командой: python -m pip install –user projectq

Ставим кубит в суперпозицию

Создаем файл quantumNumberGenerator.py и берем пример генератора бинарного числа из документации ProjectQ, просто добавляем в него цикл на 32 шага, собираем бинарную строку и переводим в 32-битное число:

import projectq.setups.ibm
from projectq.ops import H, Measure
from projectq import MainEngine
from projectq.backends import IBMBackend

binaryString = ""

eng = MainEngine()

for i in range(1, 33):

 qubit = eng.allocate_qubit()

 H | qubit

 Measure | qubit

 eng.flush()

 binaryString = binaryString + str(int(qubit))

 print("Step " + str(i))

number = int(binaryString, 2)

print("\n--- Quantum 32-Bit Number Generator by demensdeum@gmail.com (2017) ---\n")
print("Binary: " + binaryString)
print("Number: " + str(number))
print("\n---")

Запускаем и получаем число из квантового симулятора с помощью команды python quantumNumberGenerator.py

Незнаю как вы, но я получил вывод и число 3974719468:

--- Quantum 32-Bit Number Generator by demensdeum@gmail.com (2017) ---

Binary: 11101100111010010110011111101100
Number: 3974719468

---

Хорошо, теперь мы запустим наш генератор на реальном квантовом процессоре IBM.

Хакаем IBM

Проходим регистрацию на сайте IBM Quantum Experience, подтверждаем email, в итоге должен остаться email и пароль для доступа.
Далее включаем айбиэмовский движок, меняем строку eng = MainEngine() -> eng = MainEngine(IBMBackend())
В теории после этого вы запускаете код снова и теперь он работает на реальном квантовом процессоре, используя один кубит. Однако после запуска вам придется 32 раза набрать свой email и пароль при каждой аллокации реального кубита. Обойти это можно прописав свой email и пароль прямо в библиотеки ProjectQ.

Заходим в папку где лежит фреймворк ProjectQ, ищем файл с помощью grep по строке IBM QE user (e-mail).
В итоге я исправил строки в файле projectq/backends/_ibm/_ibm_http_client.py:

email = input_fun('IBM QE user (e-mail) > ') -> email = "quantumPsycho@aport.ru"

password = getpass.getpass(prompt='IBM QE password > ') -> password = "ilovequbitsandicannotlie"

Напишите свой email и password со-но.

После этого IBM будет отправлять результаты работы с кубитом онлайн прямо в ваш скрипт, процесс генерации занимает около 20 секунд.

Возможно в дальнейшем я доберусь до работы квантового регистра, и возможно будет туториал, но это не обязательно.
Да прибудет с вами запутанность.

Статья на похожую тему:
Introducing the world’s first game for a quantum computer

死亡面具

从今天开始,我开始在赛博朋克背景下开发roguelike游戏&#8211 ; 死亡面具
事实上,这应该是新火焰钢引擎上的第一款游戏,但在全 3D 出现之前必须修改引擎。
原标题是《火焰钢:死亡面具的召唤》,然后我决定简化任务,只发布游戏的一部分《火焰钢:死亡面具的召唤》。 “火焰钢:僵尸之夜”
然而,创建一个正常的、成熟的项目的想法一直困扰着我,而且标题中也充斥着火焰钢宇宙的名称。
为了获得视觉灵感,我选择了漫画 Biomega 和 < a href="http://a.co/8yUUA5i" target="_blank">责备! 火焰钢宇宙本身与暗影狂奔在太空中。
因此,如果您在这款游戏中遇到外星魔术师用左轮手枪向狼人射击魔法子弹,并通过眼睛中的网络植入物精确瞄准,请不要感到惊讶。

该游戏是根据 GitHub 上的 MIT 开源许可,使用 Flame Steel Engine 工具链和免费框架进行开发的。

GitHub:
https://github.com/demensdeum/Death-Mask

Porting SDL C++ Game to HTML5 (Emscripten)

[Translation may be some day]

За последний год я написал простейший движок Flame Steel Engine и набор классов для игровой разработки Flame Steel Engine Game Toolkit. В данной статье я опишу как производил портирование движка и SDL игры Bad Robots на HTML 5, с использованием компилятора Emscripten.

Установка Hello World – Emscripten

Для начала нужно установить Emscripten. Простейшим вариантом оказалось использование скрипта emsdk для Linux. На официальном сайте данный тип установки называется как “Portable Emscripten SDK for Linux and OS X“. Внутри архива есть инструкция по установке с использованием скрипта. Я производил установку в директорию ~/emsdk/emsdk_portable.

После установки emscripten нужно проверить корректность работы компилятора, для этого создаем простейший hello_world.cpp и собираем его в hello_world.html с помощью команд:

source ~/emsdk/emsdk_portable/emsdk_env.sh
emcc hello_world.cpp -o hello_world.html

После компиляции в папке появится hello_world.html и вспомогательные файлы, откройте его в лучшем браузере Firefox, проверьте что все работает корректно.

Портирование кода игры

В javascript нежелательно вызывать бесконечный цикл – это приводит к зависанию браузера. На данный момент корректная стратегия – запрашивать один шаг цикла у браузера с помощью вызова window.requestAnimationFrame(callback)

В Emscripten данное обстоятельство решено с помощью вызова:

emscripten_set_main_loop(em_callback_func func, int fps, int simulate_infinite_loop);

Таким образом, нужно изменить код игры для корректного вызова метода emscripten. Для этого я сделал глобальный метод GLOBAL_fsegt_emscripten_gameLoop, в котором вызываю шаг цикла игрового контроллера. Главный игровой контроллер также вынесен в глобальную видимость:

#ifdef __EMSCRIPTEN__

void GLOBAL_fsegt_emscripten_gameLoop() {

GLOBAL_fsegt_emscripten_gameController->gameLoop();

}
#endif

Также для обработки специфических для Emscripten моментов, нужно использовать макрос __EMSCRIPTEN__.

Ресурсы и оптимизация

Emscripten поддерживает ресурсы и сборку с оптимизацией.

Для добавления изображений, музыки и прочего, положите все файлы в одну папку, например data. Далее в скрипт сборки добавьте:

emcc <файлы для сборки> –use-preload-plugins –preload-file data

Флаг –use-preload-plugins включает красивый прелоадер в углу экрана, –preload-file добавляет указанный ресурс в файл <имя проекта>.data
Код постоянно останавливался с ошибками доступа к ресурсам, пока я не включил оба этих флага. Также стоит заметить что для корректного доступа к ресурсам, желательно запускать игру на https (возможно и http) сервере, или отключить защиту локального доступа к файлам в вашем браузере.

Для включения оптимизации добавьте флаги:

-s TOTAL_MEMORY=67108864 -O3 -ffast-math

TOTAL_MEMORY – оперативная память в байтах(?) необходимая для корректной работы игры. Вы можете использовать флаг для динамического выделения памяти, но тогда часть оптимизаций работать не будет.

Производительность

Код javascript из C++ работает гораздо медленнее, даже со включенными оптимизациями. Поэтому если ваша цель это разработка для HTML5, то приготовьтесь к ручной оптимизации алгоритмов игры, паралелльному тестированию, также к написанию javascript кода вручную в особо узких местах. Для написания javascript кода используется макрос EM_ASM. Во время реализации рейкастера на emscripten, мне удалось добиться повышения fps с 2-4 до 30 с помощью прямого использования методов canvas.drawImage, в обход обертки SDL->Canvas, что почти приравнялось к написанию всего на javascript.

Поддержка SDL

На данный момент почти не работает SDL_TTF, поэтому отрисовка шрифта для Game Score в BadRobots очень проста. SDL_Image, SDL_Mixer работают корректно, в mixer я проверил только проигрывание музыки.

Исходный код Flame Steel Engine, Flame Steel Engine Game Toolkit, игры Bad Robots:

https://github.com/demensdeum/BadRobots
https://github.com/demensdeum/FlameSteelEngine
https://github.com/demensdeum/FlameSteelEngineGameToolkit

Статья на эту тему:

https://hacks.mozilla.org/2012/04/porting-me-my-shadow-to-the-web-c-to-javascriptcanvas-via-emscripten/

坏机器人HTML 5 游戏

火焰钢引擎上的第一款游戏。

http://demensdeum.com/games/BadRobots/BadRobots.html

射击屏幕上的所有机器人!

作者

机器人动画– http://opengameart.org/content/xeon-ultimate-smash-friends
音乐–杀手凯文·麦克劳德 (incompetech.com)

源代码

https://github.com/demensdeum/BadRobots
https://github.com/demensdeum/FlameSteelEngine
https://github.com/demensdeum/FlameSteelEngineGameToolkit

美丽又空虚

你早上起床,妈妈给你做饭,爸爸给你钱买士力架,然后送你去学校。你在一所良好、严格、没有欺凌的学校学习。你是一名优秀的学生–你有几位导师,他们的科目都是你不擅长的。你的学校里挂着一块荣誉牌,你和你的成绩都必须在上面,最好是名列前茅。你的未来是光明的——他们每天都会给你礼物、糖果、酷炫时尚的衣服。一切看起来都很好,但你知道这样的生活实际上是多么无聊。没有挣扎的感觉,每一步都是预定的,提前几年计划好的。

这就是我玩暴雪游戏时的感受。我看到很多人不能玩老派游戏,不能玩真正原创的、不公式化的东西(致命预感请论文),但每个人都喜欢游戏暴雪

我开始熟悉他们在PC上的游戏星际争霸。继狂野和街机之后命令&征服我发现游戏玩法非常谨慎和平静。单位数量的限制,亲自钻研微纳操作让我昏昏欲睡。接下来是一个美丽但空洞的点击游戏—— 暗黑破坏神2。良好的图形、生成的关卡和零游戏玩法,绝对是冥想和空虚的消遣。然而,我的朋友们却牢牢地沉迷于《星际争霸》和《暗黑破坏神》。 2000年代初,令人兴奋的《魔兽争霸3》发布。我当时真的很喜欢单身公司。然而,多人游戏与《星际争霸》非常相似,因此非常乏味。接下来是同样美丽、空洞的《星际争霸2》。我玩过 f2p 炉石传说 –这个游戏就像老虎机一样,一开始你赢了,你对自己有信心,但后来开发商来找你,提出以 500 卢布的价格购买几副牌。你的技能并不能决定任何事情,它只决定在虚拟牌组上花费的金钱。

我最近购买了守望先锋,一款来自暴雪的射击游戏。我喜欢女主角梅,她的艺术和cosplay在所有社交网络上都被轰炸,结果极客社区里普遍的广告浪潮把我冲上了《守望先锋》玩家的岸边。

我的担心是有道理的–出色的图形,不同的英雄有自己的声音和能力。游戏过程中没有出现任何崩溃,一切都处于暴雪水平。所以,我想说的是,即使在游戏玩法上,这款游戏也同样如此精致,以至于玩起来根本没有乐趣。确实缺乏有趣的东西。意想不到的时刻,冒险的想法,公司一如既往,只吸收过去几年中最好的东西,并对其进行打磨,使其占领市场,不吝惜良好的促销。

我真正喜欢的唯一暴雪游戏– 摇滚赛车。确实有游戏性,但我怀疑这不是开发商的功劳,而是发行商的功劳—— Interplay很可能Interplay帮助暴雪使游戏变得真正可玩。

游戏愿景#2

不稳定的游戏愿景列。
我正在写我最近玩过的游戏的简短评论

wsunhd
SIM
aka Sara is Missing (Android, Monsoon Lab) – ты находишь телефон девушки по имени Сара. Внутри телефона есть встроенный помощник IRIS, она хочет найти свою хозяйку и просит тебя ей в этом помочь. Задача понять что творилось в голове Сары из ее переписки, фоточек и видео, найти где она находится. Игра очень оригинальная и достаточно пугающая. Минус в том что нет локализации на русский и другие языки, нет версии для iOS, хотя очевидно что интерфейс игры копирует продукцию Apple (IRIS – SIRI) Также игра очень короткая.
评分7/10

unnamed
The End of The World
(Android, Sean Wenham) – игра про расставание – парня бросила девушка, теперь он бродит в поисках вина и спит под мостом, вспоминая моменты когда они были вместе. Умилительные моменты воспоминаний, грустная музыка, переход в белое, в принципе отличная игра для женской аудитории и некоторых пацанов. Мне не понравилась бюджетная графика с претензией на оригинальность (напоминает Another World Эрика Шайи), нулевой геймплей, попытки выбить из игрока слезки, предсказуемость, десять минут прохождения. Любителям ванили рекомендую.
评分:5/10

unnamed

狼人大亨< /strong>(Android,乔·威廉姆森)–一款关于狼人在城市公园吃人的游戏。这里的图形和游戏玩法很有趣–儿童的颜色、没有暗色调的浅色、缺乏血色以及看起来像带有有趣动画的圆形纸杯蛋糕的人。回合短而简单,唯一的敌人是带着相机的记者。它听起来、看起来和玩起来都很有趣。缺点–难度低,看广告取消Game Over,积分提现到社交网络的机制不起作用。
评分:6/10

游戏愿景#1

不稳定的游戏愿景列。
在这篇文章中我将写一些我最近玩过的游戏的简短评论。

jansen

别以为这家伙有感情,他只是有时假装有感情。

杀出重围人类分裂 (PC、史克威尔艾尼克斯)–一款关于半人亚当·詹森 (Adam Jensen) 的游戏,他在布拉格度假并一路拯救世界。
良好的图形、高系统要求、可预测的情节、艺术家的非标准作品——一切都在这里。游戏提供了很多通过的选项,例如,我在整个游戏过程中没有杀死任何人,包括老板,从而获得了“和平主义者”成就。
我喜欢流行文化参考文献“The VoidWhich Binds”、“IRON MADE in”中国”等等。我不喜欢大量的文字–水,各种存储门密码和字符对应关系的电子邮件,文字绝对是空洞的,毫无趣味。在玩游戏时,游戏在DirectX 12模式下不断崩溃,自动保存被破坏,补丁似乎仍在发布。我决定不玩DLC,因为……我已经玩了大约两周的主游戏,摆脱了平常空虚的生活。
评分8/10

slayin

杀戮(Android,FDG)–一款非凡的像素风格手机街机游戏。你需要奔跑并杀死怪物,从商店购买装备。我喜欢这个游戏的艺术,我真的很喜欢芯片音乐,它看起来像 NES 的街机游戏,易于控制。游戏本身令人失望,因为游戏玩法仅发生在屏幕上的一个场景,并且无法在大关卡中移动。
评分5/10

swordxolan

Xolan之剑(Android,Alper Sarıkaya)–适用于手机的像素风格街机平台游戏。骑士或武士在关卡中奔跑并从铁笼子里救出人们。游戏玩法相当有趣,控制简单,关卡很大。游戏的整体预算、廉价的美术、廉价的声音、疯狂的音乐令人失望。
评分6/10

bardstale

吟游诗人’ s Tale(Android,inXile 娱乐)–手机动作角色扮演游戏的重制版。具有有趣场景和对话的非标准角色扮演游戏。游戏光盘上写着“把光盘翻过来看看有什么可怕的东西”,光盘的背面有一个镜面。以前因为无冬之夜,我在电脑上错过了这款游戏,但现在我可以在公交车上在手机上玩它了。对于现代游戏玩家来说,显然缺乏去哪里和做什么的要点,但这就是为什么我喜欢老派游戏,它们确实需要玩。而且无法随时保存,这对于手机游戏来说至关重要。音乐、艺术,我都喜欢,但我发现手机屏幕上目前的控制不方便。当然,这不是一款新游戏,而只是移动平台上的重新发布,我个人认为这是一个很大的缺点。
评分7/10

稀释ECS

<对象宽度="450" 高度="478">
Commission: Mad Scientist by Culpeo-Fox on DeviantArt

在本文中,我将粗略地描述 ECS 模式以及我在 Flame Steel Engine Game Toolkit 中的实现。实体组件系统模式用于游戏,包括游戏。在 Unity 引擎上。 游戏中的每个对象都是一个充满组件的精华。  如果有 OOP,为什么这是必要的?
然后在游戏运行时直接更改对象的属性、行为、显示。这些东西在现实世界的应用程序中是找不到的;参数、对象属性、显示和声音的动态变化比会计软件更具游戏特征。


我们没有传香蕉

假设我们的游戏中有一个香蕉类。游戏设计师希望将香蕉用作武器。假设在当前的架构中,香蕉与武器无关。把香蕉变成武器?让所有物品成为武器?
ECS 为这一紧迫问题提供了解决方案 –游戏中的所有对象都必须由组件组成。以前,banana 是 Banana 类,现在我们将创建它,以及所有其他对象,Entity 类,并向它们添加组件。假设一根香蕉现在由以下部分组成:

  1. 位置组件(游戏世界中的坐标 – x, y, z)
  2. 旋转分量(x、y、z 坐标)
  3. 一根香蕉的热量成分(主角不要太胖)
  4. 香蕉图片组件

现在我们正在为所有香蕉添加一个新组件,这是一个标志,表明它可以用作武器——武器组件。现在,当游戏系统发现玩家接近香蕉时,它会检查香蕉上是否存在武器组件,如果存在,则会用香蕉武装玩家。
在我的游戏《火焰钢之死亡召唤》中,始终使用 ECS 模式。对象由组件组成,组件本身可以包含组件。一般来说,划分对象< – >我的实现中缺少该组件,但这甚至是一个优点。

screenshot_2016-09-24_14-33-43

这张截图中的霰弹枪是玩家的一个组件,同时,第二把霰弹枪只是作为普通物体挂在游戏地图上。
在此屏幕截图中,有两个系统正在运行场景渲染器和界面渲染器。场景渲染器与地图上的霰弹枪图像组件配合使用,界面渲染器与玩家手中的霰弹枪图像组件配合使用。

相关链接:
https://habrahabr.ru/post/197920/
https://www.youtube.com/watch?v=NTWSeQtHZ9M

Flame Steel引擎游戏工具包的架构

今天我会讲一下游戏开发工具包Flame Steel Engine Game Toolkit的架构。
Flame Steel Engine游戏工具包允许您基于Flame Steel Engine创建游戏:
flamesteelgametoolkitschematics

火焰钢发动机的所有类别均以前缀FSE开头(Flame Steel >E 引擎)和FSEGTFlameSteelE引擎G梅Ttoolkit) 用于工具包。
游戏场景、对象、按钮都是FSEObject的子类,并且应该位于FSEGTGameData类内。每个FSEObject必须实现FSESerialize接口,这将允许您保存/加载游戏数据并提供保存机制。
FSEController 类与 FSEObject 类的对象一起使用。该工具包有一个基本的游戏场景控制器类 – FSEGTGameSceneController,您可以继承该类来实现您的游戏逻辑。
IOSystemFSEGTIOSystem接口的对象,该接口包含FSEGTRendererFSEGTInputControllerFSEGTUIRenderer强>。FSEGTIOSystem 必须实现一个渲染器,从键盘、操纵杆(输入设备)接收数据并提供界面元素的渲染以供访问该平台的输入/输出系统
目前,渲染器已经实现,一个基于 SDL 库的键盘控制器,可以在 FSEGTIOSDLSystem 类。

Flame Steel Engine Raycaster Demo
Flame Steel Engine Raycaster Demo

未来计划创建一个基于OpenGL的IOSystem,该类将被称为FSEGTIOGLSystem 。如果你想创建一个基于任何平台的IOSystem,那么你需要使用FSEGTIOSystem接口并实现FSEGTRenderer渲染器,FSEGTInputController平台。

Flame Steel引擎、工具包、游戏源代码:
https://github.com/demensdeum/FlameSteelCallOfTheDeathMask

Unity,为什么荒地 2 不能在我的 Ubuntu 上运行?

我很自豪能成为游戏 Wasteland 2 的支持者。今天我想在 Ubuntu 上启动它,但我不能。然而,经过一个小时的谷歌搜索后,一切都解决了。事实证明Unity在Linux上有一些严重的问题,但是通过使用某些拐杖可以启动游戏:

ulimit -Sn 65536~/.local/share/Steam/steamapps/common/Wasteland\ 2\ 导演\ Cut/Linux/WL2

食谱来自这里:
https://forums.inxile-entertainment.com/viewtopic.php?t=15505

火焰钢:速递快眼

他的名字是Revil,他的绰号是Quick Eyes。这位助手的朋友们称他为 Shustryak。作为一个在街头长大、机敏的孩子,他总是知道什么是有趣的,以及他可以从谁那里得到它。为此,他赢得了阿尔特拉犯罪环境的尊重—— 14.
他现在在 Native Farm United 的仓库里。周围都是巨大的容器,药品的味道。
–你为什么起来?拿着它就走。
店员咆哮着说道,他神色紧张,左脚挪动,看得出来他很害怕。我的衬衫被汗湿透了。
–我来自安全部门。
店员脸色惨白,踉踉跄跄的更厉害了。
–那么现在怎么办?
–在地板上–双手抱在头后!
店员皱起眉头,深吸了一口气,把手抽了下去。灵眸察觉到了不对劲——看起来他正伸手去拿枪。雷维尔一拳打在他无礼的脸上,把他打晕了,身体轰的一声倒在了他的面前。
–我求好的…
在搜查了店员后,雷维尔发现了一个哮喘患者使用的普通吸入器来代替枪。他还找到了一张进入公司实验室部门的门禁卡。这是一个非常幸运的发现。
有毒兄弟帮派他去取一批非法物质——内孔。但雷维尔并不关心兄弟俩和他们的毒性,他来这里还有另一个原因——打算画他的幸运票。
电梯门打开,舒斯特里亚克选择了地图上所示的楼层——四十二。电梯缓缓移动。雷维尔正在考虑自己要在实验室领域做什么。他了解复杂的安全系统、智能身份验证系统、脑电波分析等。

Revil by Inc
雷维尔公司

他并不孤单;Lorian 公司的一名员工同意帮助他造成系统故障,因此 Revil 将有十分钟的时间来执行他的计划。
到了三十三楼,电梯停了下来,雷维尔头顶上方传来一声巨响——“……”有东西摔在电梯顶上。
敏捷伸手去拿手枪,但就在这时,金属触手刺穿了电梯顶。他们将他缠住,发出一阵摩擦声,电梯顶向外翻。一张女孩的脸透过洞口看着他,–冰冷空洞的眼神,脸上的地板上有一块金属板,上面闪烁着红色的指示灯,故意不藏在皮肤下面。
–在你死之前,告诉我你为什么来这里?
敏捷无法动弹,钢铁触手越来越挤压他,很快他就无法呼吸了。
–我是为了本该属于我的东西而来!
女孩的脸上露出了满意的笑容。指示灯绿红交替闪烁…

火焰钢:死亡面具的召唤

今天我同时宣布三个项目!
第一个项目“跨平台应用开发的基础平台火焰钢引擎。第二个项目——一组用于基础平台 Flame Steel Game Toolkit 的库,用于游戏开发。第三个项目“一款在网络奇幻背景中生成关卡的游戏火焰钢:死亡面具的召唤
原版在 MIT 许可证下可用,游戏资产将在不同许可证下可用(分别检查每个文件)

链接到 Github(C++、Eclipse):
https://github.com/demensdeum/FlameSteelCallOfTheDeathMask

迷失自我

“你不可能成为一切的大师” –这样的话语总是让我发笑。每个人都会陷入这种专业化的陷阱。用户、程序员、老板、客户。 “我想要像微软/苹果/谷歌一样”,“我们为什么不直接生产一款俄罗斯 iPhone?”,“为什么不是”不是像 Word /uber/photoshop 中那样吗?” –任何与 IT 相关的人都听过这些短语。这些短语从不同的人嘴里重复出来,听起来更有趣。

我会问各位读者–为什么你需要另一个词?为什么你需要另一辆优步?为什么你需要另一个 Photoshop?为什么你需要“像 iPhone 一样”?
为什么您将自己束缚在一家公司的界面和方法上?为什么您将自己标记为仅 Apple/Google/Microsoft 产品的粉丝?为什么你不能敞开心扉接受其他解决问题的方法,为什么你不想提高工作效率?

许多微软用户不喜欢该公司决定每个人都需要升级到 Windows 10。人们批评 iPhone 的界面不方便、更新期间系统崩溃、他们不需要的设计更改,但他们仍然继续使用他们因为他们已经习惯了,并且拥有“iPhone”。它在现代社会具有地位。

有时候,如果微软/苹果/谷歌被要求放弃自己的孩子来换取继续使用他们的产品,那么由于对这些产品的高度依恋,人们很容易放弃自己的孩子。< /p>

不要成为他们,不要执着于一种产品,看看其他选择。有一次,我被邀请为房地产经纪人开发一个系统,该系统带有 Microsoft Excel 上的界面,并且还邀请我在 Microsoft PowerPoint 上开发“交互式白板”系统。当我具体询问为什么是微软时,他们告诉我,他们“已经习惯了”;当我问这些公司是否获得了微软的软件许可时,他们闪烁其词地回答说,如果有必要,他们会“这样做”。然后他们就会购买它。

读者,我强烈建议您研究一下 IT 世界的各个方面,至少是简单地研究一下。如果您一生只使用 Microsoft Windows,请尝试 Apple OS X 或 Linux。如果您只使用 iPhone,请尝试使用最新版本的 Android 至少一周。当你只站在一家公司一边,将自己与其他公司的产品隔离开来的那一刻,你就迷失了自己。他自己,作为一个可以自己决定自己想要什么的人,作为一个可以选择最方便、最有效的工具来解决特定问题的人。

只有一个平台的程序员——这对我个人以及整个 IT 行业来说也是一个令人头疼的问题。制作仅导出到 *.doc 或仅导出到 *.pdf 的应用程序的开发人员、仅依赖于一种过时的商业数据库(例如 IBM Informix 或上帝保佑 Firebird)的开发人员、仅依赖于一种类型的硬件(所有这些Android 上 x86 的非工作程序),当然我知道你已经“习惯”了,但是伙计们,是时候改变了。

在工作中我经常使用不受欢迎但非常方便的工具。其中一个例子是“为了通过3G快速下载并输出到iPad,需要降低分辨率并压缩大约100张照片。那天我听到了最典型的短语之一“” “我们必须在 *Photoshop* 中手动将所有照片转换为所需的形式”。我觉得她很有趣,因为……我想象一个人会像上帝的仆人一样,在 Photoshop 中手动重做所有这 100 张照片,或者尝试通过内置机制将它们自动化。这里的要点恰恰在于,这个人如此迷恋 Photoshop,以至于他甚至没有怀疑过像 ImageMagick 这样的免费、开放的工具集的存在。 ImageMagick 允许您使用矢量和光栅图像做很多事情,包括在 5 分钟内解决 100 个图像问题的理想选择。

做一切的主人,学习,尝试,不要成为特定公司的奴隶。

16 位圣诞老人助手

我通过电子邮件收到一条消息:
“嘿,我们要在这里举办一场复古游戏盛会– bibitjam3!!!你应该在8-16位的复古平台上制作游戏!!!”
呸!这是我儿时的梦想–为 Sega Mega Drive Two 制作游戏。
嗯,我尝试做一个玩具,甚至成功了:
rqr
我把这个游戏命名为“红皇后的揉捏”。故事是“ “红皇后被扔进了致命的迷宫,现在她将在通往自由的路上杀死所有人。”
你可以四处走动,你可以用红眼睛攻击绿色的东西,打开宝箱,从一个场景移动到另一个场景。
这当然是“尝试水平”。至少为将棋、为比赛做点事吧。
我正在使用 SGDK 工具包 –基于 GCC 的 Motorola 68k 编译器,用于与 Sega Mega 硬件配合使用的库。
现在我明白了,这真的很难—— 20-30年前制作游戏。例如,每个图块“应分为 8×8 像素块并一次绘制一个块。另外,每个图块的调色板不应超过 16 种颜色!当然,现在容易多了。
当然,您需要为游戏创建游戏、声音和图形引擎,就像现在一样。
您可以使用Sega Genesis模拟器和游戏ROM来玩Red Queen:
http://demensdeum.com/games/redQueenRampageSegaGenesis/RedQueenRampage.zip
如果您想查看来源:
http://demensdeum.com/games/redQueenRampageSegaGenesis/RedQueenRampageSource.zip

教程:在 Android 上制作游戏。我们扭曲地球。拉贾瓦利

起初上帝创造了天地。

这是我们制作 Android 游戏的第二个视频。让我们一起移动地球!
如果您有任何疑问或想向本课程添加任何内容,请联系我。
视频基于文章 Rajawali 基本设置和球体(Maven)
http://www.clintonmedbery.com/basic-rajawali3d-tutorial-for-android/

Rajawali 引擎:https://github.com/Rajawali/Rajawali

计划、命令、链接:
1. 安装VirtualBox来宾添加

sudo apt-get install dkmssudo apt-get install linux-headers-$(uname -r)

2.将 Rajawali 库添加到项目
文件build.gradle(项目:恶魔洞穴)
添加mavenCentral()< /span>buildscript/repositories
部分添加
maven { url< /span> “https://oss.sonatype.org/content/repositories/snapshots/” } 所有项目/存储库部分

文件build.gradle(模块:app)
添加编译 ‘org.rajawali3d:rajawali:1.0.306-SNAPSHOT@aar& #8217; 依赖项
部分

3.创建一个Renderer类,初始化场景,添加一个球体并旋转!
Renderer.java类的源代码:
https://github.com/clintonmedbery/RajawaliBasicProject/blob/master/app/src/main/java/com/clintonmedbery/rajawalibasicproject/Renderer.java

4.将Renderer类添加到MainActivity
源代码MainActivity.java:
https://github.com/clintonmedbery/RajawaliBasicProject/blob/master/app/src/main/java/com/clintonmedbery/rajawalibasicproject/MainActivity.java

地面纹理:
http://www.clintonmedbery.com/wp-content/uploads/2015/04/earthtruecolor_nasa_big.jpg