Soumettre la recherche
Mettre en ligne
コルーチンでC++でも楽々ゲーム作成!
•
5 j'aime
•
7,545 vues
A
amusementcreators
Suivre
コルーチンの概要とゲーム開発への応用、C++用コルーチンライブラリHamigaki.Coroutineの使い方について説明します。
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 15
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Yoshifumi Kawai
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
Recommandé
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Yoshifumi Kawai
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
KageShiron
最速C# 7.x
最速C# 7.x
Yamamoto Reki
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
Satoshi Kodaira
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
Mitsuru Kariya
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
Riderはいいぞ!
Riderはいいぞ!
UnityTechnologiesJapan002
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
闇魔術を触ってみた
闇魔術を触ってみた
Satoshi Sato
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Hiro H.
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
インタフェース完全に理解した
インタフェース完全に理解した
torisoup
ライセンスの話
ライセンスの話
amusementcreators
空間分割
空間分割
amusementcreators
Contenu connexe
Tendances
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
KageShiron
最速C# 7.x
最速C# 7.x
Yamamoto Reki
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
Satoshi Kodaira
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
Mitsuru Kariya
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
Riderはいいぞ!
Riderはいいぞ!
UnityTechnologiesJapan002
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
闇魔術を触ってみた
闇魔術を触ってみた
Satoshi Sato
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Hiro H.
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
インタフェース完全に理解した
インタフェース完全に理解した
torisoup
Tendances
(20)
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
最速C# 7.x
最速C# 7.x
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
プログラムを高速化する話
プログラムを高速化する話
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Glibc malloc internal
Glibc malloc internal
Riderはいいぞ!
Riderはいいぞ!
C#でわかる こわくないMonad
C#でわかる こわくないMonad
C++ マルチスレッド 入門
C++ マルチスレッド 入門
闇魔術を触ってみた
闇魔術を触ってみた
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
明日使えないすごいビット演算
明日使えないすごいビット演算
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
インタフェース完全に理解した
インタフェース完全に理解した
Plus de amusementcreators
ライセンスの話
ライセンスの話
amusementcreators
空間分割
空間分割
amusementcreators
わたしのゲーミング
わたしのゲーミング
amusementcreators
曲線について
曲線について
amusementcreators
HTML5でゲームが作れます
HTML5でゲームが作れます
amusementcreators
C++11のつかいかた
C++11のつかいかた
amusementcreators
DUAL SHOCK2で遊ぼう
DUAL SHOCK2で遊ぼう
amusementcreators
Pythonでゲーム作る
Pythonでゲーム作る
amusementcreators
ライフゲーム
ライフゲーム
amusementcreators
Lt nande linux_nano
Lt nande linux_nano
amusementcreators
Lt130123
Lt130123
amusementcreators
コルーチンを使おう
コルーチンを使おう
amusementcreators
20121212
20121212
amusementcreators
Kim120 lt 12_6
Kim120 lt 12_6
amusementcreators
かんたん作曲講座(2)
かんたん作曲講座(2)
amusementcreators
かんたん作曲講座(1)
かんたん作曲講座(1)
amusementcreators
猫には分からないオセロAIの仕組み
猫には分からないオセロAIの仕組み
amusementcreators
フォントのしくみ
フォントのしくみ
amusementcreators
AVRマイコン入門
AVRマイコン入門
amusementcreators
読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム
amusementcreators
Plus de amusementcreators
(20)
ライセンスの話
ライセンスの話
空間分割
空間分割
わたしのゲーミング
わたしのゲーミング
曲線について
曲線について
HTML5でゲームが作れます
HTML5でゲームが作れます
C++11のつかいかた
C++11のつかいかた
DUAL SHOCK2で遊ぼう
DUAL SHOCK2で遊ぼう
Pythonでゲーム作る
Pythonでゲーム作る
ライフゲーム
ライフゲーム
Lt nande linux_nano
Lt nande linux_nano
Lt130123
Lt130123
コルーチンを使おう
コルーチンを使おう
20121212
20121212
Kim120 lt 12_6
Kim120 lt 12_6
かんたん作曲講座(2)
かんたん作曲講座(2)
かんたん作曲講座(1)
かんたん作曲講座(1)
猫には分からないオセロAIの仕組み
猫には分からないオセロAIの仕組み
フォントのしくみ
フォントのしくみ
AVRマイコン入門
AVRマイコン入門
読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム
Dernier
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Dernier
(10)
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
コルーチンでC++でも楽々ゲーム作成!
1.
コルーチンで C++でも楽々ゲーム作成!
Or Hamigaki.Coroutineの紹介 @ArGxento
2.
概要
コルーチンとは? ゲーム開発への応用 Hamigaki.Coroutineの紹介 その問題点
3.
コルーチンとは? • 普通のサブルーチンは、一度脱出してしまうと
次に呼び出す時はリセットされてしまう • コルーチンは脱出しても、次に呼び出したら前 回抜けた場所から再開できる。 • → ビデオの一時停止と停止の違い
4.
• 一般的には、たくさんのものから一つづ
つ選んでくる処理などによく使われる • ゲーム内のキャラクターの動きや、アニ メーション処理を作るのに便利
5.
• 具体的には… 1ターンごとに1歩ずつプレイヤーに近づき、攻
撃範囲内に一度でも入ったら数ターン攻撃し て逃げていく敵 • 近づいている/攻撃している/逃げている を識別す るフラグと、攻撃したターン数のカウンタが必要 →どうやって保持する?もっとフラグが増えたら? コルーチンならすべて解決!
6.
コルーチンを使わない場合
コルーチンを使った場合 switch(this->actionPhase){ // 行動フェーズ // プレイヤーに接近する case 0: // 接近中 while(getDistance(player, *this) > aimToPlayer(); attackRange){ walk(1); aimToPlayer(); if(getDistance(player, *this) <= attackRange){ walk(1); actionPhase = 1; self.yield(); } } return; case 1: // 攻撃中 // 5ターン攻撃 if(attackTurnCounter > 4){ for(int i = 0;i <= 4; i++){ actionPhase = 2; attack(player); attackTurnCounter = 0; self.yield(); } } attack(player); attackTurnCounter++; // 逃げる return; case 2: // 逃走中1 aimTo(getAngle(player) + deg(180)); aimTo(getAngle(player) + deg(180)); while(1){ actionPhase = 3; walk(2); return; self.yield(); case 3: // 逃走中2 } walk(2); return; } 面倒なフェーズ管理とおさらば
7.
• C#やLuaといった言語には標準で搭載さ
れており、一つの強みだった。 • しかし、C++にはない • C++ユーザから要望が強かった →満足なライブラリがなかなか出なかった
8.
そこでBoost.Coroutineが登場!
9.
…あれ、開発止まってる?
…これ動かないんじゃ… …むしろ今だと入手すら困難… …でも他にいいライブラリもあんまりないし…
10.
そこで、郵便はみがき氏が開発した
Boost.Coroutineの上位互換ライブラリ Hamigaki.Coroutine http://sourceforge.jp/projects/hamigaki/ 特徴: Windowsでも動く 使いやすい ライセンスがBoostと同じ
11.
Hamigaki.Coroutineの使い方 • 通常の関数の引数+コルーチン制御用の引数な
関数を定義 • 目的の引数と返り値の型をテンプレート引数に 取ったオブジェクトを宣言 • 上のコンストラクタに目的の関数を入れてコ ルーチン生成
12.
#include <hamigaki/coroutine/coroutine.hpp> namespace coro
= hamigaki::coroutines; typedef coro::coroutine<int(int)> coro_type; int func_body(coro_type::self& self, int a) { // 実際の処理 for(int i = 0; i < 42 ; ++i){ self.yield(i + a); } self.exit(); } coro_type func(func_body); // コルーチン自身
13.
• self.yield に返り値を渡して、一時中断できる •
self.yieldの返り値によって、二回目以降の呼び出し の引数が分かる • self.exit または通常の return で、コルーチンの 終了を通知できる → 次からは呼び出せなくなる • コルーチンが終了すると、例外が投げられる
14.
問題点 • 終了時に例外を投げられると困る
→ 例外の代わりにBoost.Optionalを使って通知する オプションもある • 一度終了すると初期化して再利用できない → コンストラクタを呼んで初期化する管理クラス に内包させた方がいいかも
15.
ご清聴ありがとうございました
再掲 Hamigaki C++ Libraries http://sourceforge.jp/projects/hamigaki/
Télécharger maintenant