Enviar búsqueda
Cargar
コルーチンでC++でも楽々ゲーム作成!
•
5 recomendaciones
•
7,542 vistas
A
amusementcreators
Seguir
コルーチンの概要とゲーム開発への応用、C++用コルーチンライブラリHamigaki.Coroutineの使い方について説明します。
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 15
Descargar ahora
Descargar para leer sin conexión
Recomendados
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
コルーチンの使い方
コルーチンの使い方
Naohiro Yoshikawa
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
Recomendados
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
コルーチンの使い方
コルーチンの使い方
Naohiro Yoshikawa
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Keisuke Fukuda
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
TetsuroMatsumura
C#で速度を極めるいろは
C#で速度を極めるいろは
Core Concept Technologies
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
例外設計における大罪
例外設計における大罪
Takuto Wada
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
UnityTechnologiesJapan002
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
Unity Technologies Japan K.K.
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
Unity Technologies Japan K.K.
async/await のしくみ
async/await のしくみ
信之 岩永
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
Unity Technologies Japan K.K.
Fortniteを支える技術
Fortniteを支える技術
エピック・ゲームズ・ジャパン Epic Games Japan
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
DeNA
ライセンスの話
ライセンスの話
amusementcreators
空間分割
空間分割
amusementcreators
Más contenido relacionado
La actualidad más candente
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Keisuke Fukuda
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
TetsuroMatsumura
C#で速度を極めるいろは
C#で速度を極めるいろは
Core Concept Technologies
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
例外設計における大罪
例外設計における大罪
Takuto Wada
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
UnityTechnologiesJapan002
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
Unity Technologies Japan K.K.
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
Unity Technologies Japan K.K.
async/await のしくみ
async/await のしくみ
信之 岩永
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
Unity Technologies Japan K.K.
Fortniteを支える技術
Fortniteを支える技術
エピック・ゲームズ・ジャパン Epic Games Japan
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
DeNA
La actualidad más candente
(20)
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
プログラムを高速化する話
プログラムを高速化する話
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C#で速度を極めるいろは
C#で速度を極めるいろは
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
例外設計における大罪
例外設計における大罪
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
オブジェクト指向できていますか?
オブジェクト指向できていますか?
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
async/await のしくみ
async/await のしくみ
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
Fortniteを支える技術
Fortniteを支える技術
C++ マルチスレッド 入門
C++ マルチスレッド 入門
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Más 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
Más 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マイコン入門
読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム
Último
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
Último
(9)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
コルーチンで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/
Descargar ahora