私の自由な時間にやっている私の小さなプロジェクト、「tengine」と呼ばれる長年のプロジェクトについて学ぶことに興味がある人を歓迎します。
この投稿の目的は何ですか? 答えは簡単です-odnodumtsevを探しています。 輝かしく親切なオールドスクールが好きな人はもっといると思います。 これは全体の使命です-8/16ビットのスタイルの「コンソール」玩具のプラットフォームである、小さいながらも非常に機能的なプラットフォームのために喜びを書くこと。
tengine DEMOゲーム(Webバージョン)コントロール:矢印キー、ctrl。 フルエンディング。
tengineを何百もの類似のクラフトと区別する主な機能は、それほど標準的ではないイデオロギーです:
- プロジェクトのアーキテクチャは、動的メモリの使用を最小限に抑えることに焦点を当てています。 メモリが割り当てられている場合、初期化サブシステムに排他的に割り当てられます
- オペレーティングシステムがないかのように動的メモリを使用する必要があります。断片化については常に覚えておいてください。 メモリの削除は、作成の厳密に逆の順序で行われます(これには、削除されたポインターを制御するための単純なメカニズムが続きます)
- サードパーティのライブラリの使用は最小限に抑えられており、議論する必要があります。多くの場合、メモリの断片化の潜在的な原因です。
- ゲームシーンは、レベルエディタによって生成されたすぐに使用できるメモリです
- ゲームシーンのオブジェクトの処理は、識別子を介して排他的に実行され、オブジェクトを動的に作成することは不可能です
- フロートの代わりに固定小数点を使用する
- マルチプラットフォーム
- プロジェクトの公用語はCです
当初、私はこれをすべて、私のお気に入りのゲームプラットフォームであるニンテンドーdsで書きました。 しかし、時代は変わりつつあり、すべてをより人気のあるテクノロジーの世界に移さなければなりませんでした。 そのため、後でAndroidのブランチがメインになりました。 win32バージョンは、よりデバッグの役割を果たします。 計画どおり、ゲームはwin32で作成およびデバッグされ、他のプラットフォームにコンパイルされます(もちろん、これはすべて条件付きで、win32ではすべての機能が完全に動作します)。 1人の非常に優れた愛好家の出現で、プロジェクトはNIXプラットフォームも買収しました。 nintendo dsはサポートされなくなりましたが、私は意図的にプリプロセッサキーの下のプラットフォームコードをプロジェクトから削除しませんでした。 複数の画面や論理レンダリングレイヤーのサポートなど、任天堂固有のアーキテクチャ機能もいくつかありました。 これらはすべてわずかですが、ドキュメントで説明されています。
tengineは次のとおりです。
- android ndk、ios、win32、nix、kolibriOS、Emscripten向けの既製のマルチプラットフォーム機能興味深いニトロは非常に小さいです)
- Emscripten(https://github.com/kripken/emscripten/wiki)に基づくブラウザーベースのjs / html、ie11でも良好なパフォーマンス
- フレームアロケータの原理に基づくメモリ使用量(作成とは厳密に逆の順序でメモリを削除する)
- スクリプト言語の使用を放棄できる動的オブジェクトの作成のアーキテクチャ上の制限
- openGL es 1.x / 2.0およびレンダリング用の独自のブリッターを使用する
- サウンドにopenAL(Android NDKのopenSL es)を使用する
- マルチタッチ、dpad、キーボードをサポート
- pthreadベースのマルチスレッドサポート(ストリーミングアニメーションの読み込み、ファイル処理、サウンド)
- 初期段階でネットワークを操作するための機能
- (原始)粒子のシステム
- グラフィックリソースコンバーター(r5g5b5a1プライマリおよびr8g8b8a8補助)
- ゲームオブジェクトを操作するためのシンプルなインターフェイス:位置、プロパティ、状態
- イベント(アニメーションの終了、ノードの達成など)
- ゲームオブジェクトのアニメーションフレームに基本的なアフィン変換を適用するためのサポート
- 複雑な形状のゲームオブジェクトのピクセル境界をチェックする機能
- タイルカードのサポート
- 半透明のサポート
- 指定された色の画像データの混合をサポート
- パスノードのロジックのサポート(それに沿ってオブジェクトを移動できます)
- (部分的に実装)衝突線のシステム。これを使用して、任意の角度で「通過可能性」の境界または場所を設定できます。
- アプリケーション開発とデバッグを簡素化するwin32 / nix用エミュレータ
- 基本的なドキュメント
これらすべてに加えて、tengineのアドオンであるguiサブシステムがあります。 主なアイデア:すべてのgui要素は通常のゲームオブジェクトであり、初期化時に、たとえば「ボタン」などのgui要素のプリインストール機能を取得します。 guiコンテナにゲームオブジェクトを登録し、どのような動作が期待されるかを示すだけで十分です。 残りはアドインに引き継がれます。
レベルエディタ(me3)は、tengineの「レベル」を作成するためのユーティリティで、次のものが含まれます。
- グラフィックリソースサブシステム
- 衝突ゾーン、ユーザーイベント、アタッチメントポイントを含む複雑なフレームごとのアニメーションを作成するためのサブシステム(他のゲームオブジェクト、たとえば武器を手に動的にアタッチするため)
- 背景のタイルマップを作成するサブシステム
- 特定の条件に従ってオブジェクトのプロパティを変更できるトリガーのサブシステム
- トラックノードのサブシステム
- 衝突線作成サブシステム
- オブジェクトの論理状態を作成し、アニメーションに結び付けるサブシステム
- オブジェクトのプロパティを作成し、それらを操作するためのサブシステム
- オブジェクトマネージャー
- 完成したマップのデバッグ、トリガーの操作の追跡、ユーザーイベント
- フォント、テキストフィールド(テキストオブジェクト)、内部テキストエディターのサポート
- 異なる言語でのテキストのローカライズの機能サポート
- tengine用のデータを含む既製のバイナリファイルの作成、xmlへのエクスポート
エディターを扱うことは最初は少し難しいですが、私は特に友人のゲームデザイナーのためにそれを書きました。 しかし、サンプルフォルダーにはサンプルがあり、ロシア語のインターフェイスもありますが、私にとっては非常に直感的です。 残念ながら、ドキュメントはまだ書けるようになっていない。
まだ興味がある人は、すべてが
https://bitbucket.org/pascualle/tengineで利用可能です
ボーナスとして、最近
habrahabr.ru/post/178135で説明
されているverletライブラリの
カタログを作成し ました 。 少し離れていますが、パフォーマンスについてはすでにテストされています(サンプル/クモの例を参照)
小さなチュートリアルも読んでください(注意、写真はありません!)「tengineで小さなゲームを作成する」
habrahabr.ru/post/180443