Suche senden
Hochladen
コルーチンでC++でも楽々ゲーム作成!
•
5 gefällt mir
•
7,541 views
A
amusementcreators
Folgen
コルーチンの概要とゲーム開発への応用、C++用コルーチンライブラリHamigaki.Coroutineの使い方について説明します。
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 15
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
コルーチンの使い方
コルーチンの使い方
Naohiro Yoshikawa
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
祐司 伊藤
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Keisuke Fukuda
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
Empfohlen
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
コルーチンの使い方
コルーチンの使い方
Naohiro Yoshikawa
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
祐司 伊藤
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Keisuke Fukuda
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
C++の黒魔術
C++の黒魔術
Daichi OBINATA
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
Unity Technologies Japan K.K.
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
Map
Map
kikairoya
【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう
Unity Technologies Japan K.K.
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
Satoshi Kodaira
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
Unity Technologies Japan K.K.
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-
torisoup
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
IL2CPPに関する軽い話
IL2CPPに関する軽い話
Wooram Yang
ゲームエンジンの中の話
ゲームエンジンの中の話
Masayoshi Kamai
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
TetsuroMatsumura
空間分割
空間分割
amusementcreators
Immersal を活用した AR クラウドなシステム開発とハンズオン!
Immersal を活用した AR クラウドなシステム開発とハンズオン!
NishoMatsusita
UniRx完全に理解した
UniRx完全に理解した
torisoup
ライセンスの話
ライセンスの話
amusementcreators
わたしのゲーミング
わたしのゲーミング
amusementcreators
Weitere ähnliche Inhalte
Was ist angesagt?
C++の黒魔術
C++の黒魔術
Daichi OBINATA
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
Unity Technologies Japan K.K.
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
Map
Map
kikairoya
【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう
Unity Technologies Japan K.K.
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
Satoshi Kodaira
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
Unity Technologies Japan K.K.
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-
torisoup
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
IL2CPPに関する軽い話
IL2CPPに関する軽い話
Wooram Yang
ゲームエンジンの中の話
ゲームエンジンの中の話
Masayoshi Kamai
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
TetsuroMatsumura
空間分割
空間分割
amusementcreators
Immersal を活用した AR クラウドなシステム開発とハンズオン!
Immersal を活用した AR クラウドなシステム開発とハンズオン!
NishoMatsusita
UniRx完全に理解した
UniRx完全に理解した
torisoup
Was ist angesagt?
(20)
C++の黒魔術
C++の黒魔術
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
Map
Map
【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう
プログラムを高速化する話
プログラムを高速化する話
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
IL2CPPに関する軽い話
IL2CPPに関する軽い話
ゲームエンジンの中の話
ゲームエンジンの中の話
マルチコアを用いた画像処理
マルチコアを用いた画像処理
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
空間分割
空間分割
Immersal を活用した AR クラウドなシステム開発とハンズオン!
Immersal を活用した AR クラウドなシステム開発とハンズオン!
UniRx完全に理解した
UniRx完全に理解した
Mehr von 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
IEとメモ帳でかんたんゲーム開発
IEとメモ帳でかんたんゲーム開発
amusementcreators
Mehr von 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マイコン入門
読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム
IEとメモ帳でかんたんゲーム開発
IEとメモ帳でかんたんゲーム開発
Kürzlich hochgeladen
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
Kürzlich hochgeladen
(8)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
コルーチンで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/
Jetzt herunterladen