SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
コルーチンを使おう
Report
amusementcreators
Follow
Jan. 16, 2013
•
0 likes
•
8,797 views
1
of
17
コルーチンを使おう
Jan. 16, 2013
•
0 likes
•
8,797 views
Download Now
Download to read offline
Report
Technology
amusementcreators
Follow
Recommended
コルーチンでC++でも楽々ゲーム作成!
amusementcreators
7.4K views
•
15 slides
コルーチンの使い方
Naohiro Yoshikawa
14.7K views
•
52 slides
Boost.Coroutine
melpon
23.8K views
•
44 slides
Continuation with Boost.Context
Akira Takahashi
2.1K views
•
24 slides
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
10.9K views
•
17 slides
Effective modern-c++#9
Tatsuki SHIMIZU
858 views
•
36 slides
More Related Content
What's hot
新しい並列for構文のご提案
yohhoy
29.6K views
•
71 slides
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
12.7K views
•
31 slides
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
Ryo Sakamoto
8.8K views
•
45 slides
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
46.9K views
•
122 slides
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
10.9K views
•
145 slides
C++でHello worldを書いてみた
firewood
6.8K views
•
22 slides
What's hot
(20)
新しい並列for構文のご提案
yohhoy
•
29.6K views
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
•
12.7K views
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
Ryo Sakamoto
•
8.8K views
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
•
46.9K views
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
•
10.9K views
C++でHello worldを書いてみた
firewood
•
6.8K views
emc++ chapter32
Tatsuki SHIMIZU
•
1.1K views
Async design with Unity3D
Kouji Hosoda
•
74.3K views
Boost.SIMD
Akira Takahashi
•
4.6K views
Map
kikairoya
•
10.1K views
boost tour 1.48.0 all
Akira Takahashi
•
2.6K views
SSE4.2の文字列処理命令の紹介
MITSUNARI Shigeo
•
8.7K views
Boost Tour 1.50.0 All
Akira Takahashi
•
8.3K views
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
MITSUNARI Shigeo
•
14.5K views
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
•
4.8K views
C++11概要 ライブラリ編
egtra
•
3K views
llvm入門
MITSUNARI Shigeo
•
16.6K views
Destructive Call
Cryolite
•
952 views
RubyKaigi2014: Just in Time compiler for CRuby
imasahiro
•
1.1K views
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
•
10.7K views
Viewers also liked
UnityでC#を勉強しはじめた私の主張
Ryota Murohoshi
11.2K views
•
153 slides
Unityで覚えるC#
Masamitsu Ishikawa
130.6K views
•
57 slides
ゲーム開発とデザインパターン
Takashi Komada
24.8K views
•
23 slides
【 #Unity会 】このUnityがすごい2015年版
ui nyan
88.7K views
•
121 slides
XNAとはなにか?XNAうれしいところ、うれしくないところ
IGDA Japan
2.4K views
•
48 slides
Unity入門講座その1
spi8823
9.9K views
•
36 slides
Viewers also liked
(20)
UnityでC#を勉強しはじめた私の主張
Ryota Murohoshi
•
11.2K views
Unityで覚えるC#
Masamitsu Ishikawa
•
130.6K views
ゲーム開発とデザインパターン
Takashi Komada
•
24.8K views
【 #Unity会 】このUnityがすごい2015年版
ui nyan
•
88.7K views
XNAとはなにか?XNAうれしいところ、うれしくないところ
IGDA Japan
•
2.4K views
Unity入門講座その1
spi8823
•
9.9K views
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
narumi_
•
9.6K views
ゲーム制作初心者が知るべき8つのこと
MASA_T_O
•
342K views
C++が仲間になりたそうにこちらを見ている
fjnl
•
1.3K views
左と右の話
Cryolite
•
6.8K views
コルーチンの実装について
Taku Miyakawa
•
3.3K views
Node.jsに縁のない職場でnode.jsを使い始める戦術
Isamu Suzuki
•
5.7K views
テキストアドベンチャーゲームのアーキテクチャと工程
tuna cook
•
7K views
Tokyo nodefestival workshop_20161112
Junichi Okamura
•
5.7K views
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
Hiroyuki Kusu
•
7.2K views
Node.js with WebRTC DataChannel
mganeko
•
7.5K views
普段C#を使っている僕から見たKotlin
Ryota Murohoshi
•
7.6K views
ゲームオブジェクトの管理
Shota Homma
•
7.4K views
ゲーム開発とMVC
Takashi Komada
•
16.1K views
C#の書き方
信之 岩永
•
9K views
Similar to コルーチンを使おう
オブジェクト指向できていますか?
Moriharu Ohzu
236.7K views
•
129 slides
Scalaの限定継続の応用と基本(改訂版)
Kota Mizushima
885 views
•
96 slides
競技プログラミングのためのC++入門
natrium11321
32.9K views
•
63 slides
for JSDeferred Code Reading
Kenichirou Oyama
638 views
•
18 slides
Clojure programming-chapter-2
Masao Kato
1.1K views
•
33 slides
Unityクリエイターズ勉強会【2/2】【関西】発表資料
Masataka Motokurumada
2.4K views
•
61 slides
Similar to コルーチンを使おう
(20)
オブジェクト指向できていますか?
Moriharu Ohzu
•
236.7K views
Scalaの限定継続の応用と基本(改訂版)
Kota Mizushima
•
885 views
競技プログラミングのためのC++入門
natrium11321
•
32.9K views
for JSDeferred Code Reading
Kenichirou Oyama
•
638 views
Clojure programming-chapter-2
Masao Kato
•
1.1K views
Unityクリエイターズ勉強会【2/2】【関西】発表資料
Masataka Motokurumada
•
2.4K views
2012 03-03-titanium plusquicktigame2d
Hiroshi Oyamada
•
723 views
Boost9 session
freedom404
•
1.8K views
Python で munin plugin を書いてみる
ftnk
•
4.6K views
Boost tour 1_40_0
Akira Takahashi
•
2.5K views
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
Unity Technologies Japan K.K.
•
14.7K views
CUDAを利用したPIV解析の高速化
翔新 史
•
1.1K views
Python physicalcomputing
Noboru Irieda
•
1.5K views
【Unity道場スペシャル 2017札幌】乱数完全マスター
Unity Technologies Japan K.K.
•
13.6K views
x86とコンテキストスイッチ
Masami Ichikawa
•
8.6K views
Enjoy handwritten digits recognition AI !!
KAIKenzo
•
351 views
D言語会議#1
9rnsr
•
669 views
C++0x 言語の未来を語る
Akira Takahashi
•
1.7K views
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
勝成 鈴江
•
5.2K views
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
mganeko
•
1.3K views
More from amusementcreators
ライセンスの話
amusementcreators
1.5K views
•
21 slides
空間分割
amusementcreators
8.6K views
•
22 slides
わたしのゲーミング
amusementcreators
862 views
•
17 slides
曲線について
amusementcreators
4.3K views
•
12 slides
HTML5でゲームが作れます
amusementcreators
574 views
•
9 slides
C++11のつかいかた
amusementcreators
1.1K views
•
13 slides
More from amusementcreators
(20)
ライセンスの話
amusementcreators
•
1.5K views
空間分割
amusementcreators
•
8.6K views
わたしのゲーミング
amusementcreators
•
862 views
曲線について
amusementcreators
•
4.3K views
HTML5でゲームが作れます
amusementcreators
•
574 views
C++11のつかいかた
amusementcreators
•
1.1K views
DUAL SHOCK2で遊ぼう
amusementcreators
•
1.4K views
Pythonでゲーム作る
amusementcreators
•
8.5K views
ライフゲーム
amusementcreators
•
3.6K views
Lt nande linux_nano
amusementcreators
•
3.6K views
Lt130123
amusementcreators
•
3.5K views
20121212
amusementcreators
•
468 views
Kim120 lt 12_6
amusementcreators
•
342 views
かんたん作曲講座(2)
amusementcreators
•
993 views
かんたん作曲講座(1)
amusementcreators
•
846 views
猫には分からないオセロAIの仕組み
amusementcreators
•
6.2K views
フォントのしくみ
amusementcreators
•
1.9K views
AVRマイコン入門
amusementcreators
•
2K views
読みやすいプログラム、書き換えやすいプログラム
amusementcreators
•
925 views
IEとメモ帳でかんたんゲーム開発
amusementcreators
•
3.7K views
Recently uploaded
20230921_IoTLT_vol103_kitazaki_v1.pdf
Ayachika Kitazaki
81 views
•
16 slides
遠隔お酌IoTLT2309.pptx
Yoshiaki Ito
57 views
•
12 slides
CCoE実践者コミュニティ#1_CCoEが進めるセキュリティカイゼンの旅.pptx
Tomoaki Tada
25 views
•
20 slides
gtk4_gem_usage.pdf
ssuser0ef4681
11 views
•
6 slides
GraphQLはどんな時に使うか
Yutaka Tachibana
6 views
•
37 slides
IGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdf
IGDA Japan SIG-Audio
97 views
•
31 slides
Recently uploaded
(8)
20230921_IoTLT_vol103_kitazaki_v1.pdf
Ayachika Kitazaki
•
81 views
遠隔お酌IoTLT2309.pptx
Yoshiaki Ito
•
57 views
CCoE実践者コミュニティ#1_CCoEが進めるセキュリティカイゼンの旅.pptx
Tomoaki Tada
•
25 views
gtk4_gem_usage.pdf
ssuser0ef4681
•
11 views
GraphQLはどんな時に使うか
Yutaka Tachibana
•
6 views
IGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdf
IGDA Japan SIG-Audio
•
97 views
松下研究室紹介_関西大学高槻キャンパスオープンキャンパス
Matsushita Laboratory
•
26 views
テスト自動化.pdf
ssuserf8ea02
•
16 views
コルーチンを使おう
1.
コルーチンを使おう
2.
WHO AM I? •
ナムアニクラウドと申します • 主にC#でゲームなどのプログラミングをしてます • Twitter: @NumAniCloud Twitterアイコン→
3.
コルーチンとは // イメージ(C#) IEnumerator ShotRoutine(){
Shot(); yield return 0; // ここで抜ける! Shot(); // 続きはあとで実行する } • 関数とかメソッドの仲間です • 途中で抜けて、あとで再開することができるのが特徴です
4.
実行のイメージ // 定義
// 呼び出し IEnumerator Fiber(){ void Main(){ Shot(); var x = Fiber(); yield return 0; x.MoveNext(); Shot(); Hoge(); Shot(); x.MoveNext(); yield return 0; x.MoveNext(); yield return 0; x.MoveNext(); } }
5.
実行のイメージ // 定義
// 呼び出し IEnumerator Fiber(){ void Main(){ Shot(); var x = Fiber(); yield return 0; x.MoveNext(); Shot(); Hoge(); Shot(); x.MoveNext(); yield return 0; x.MoveNext(); yield return 0; x.MoveNext(); } }
6.
実行のイメージ // 定義
// 呼び出し IEnumerator Fiber(){ void Main(){ Shot(); var x = Fiber(); yield return 0; x.MoveNext(); Shot(); Hoge(); Shot(); x.MoveNext(); yield return 0; x.MoveNext(); yield return 0; x.MoveNext(); } }
7.
実行のイメージ // 定義
// 呼び出し IEnumerator Fiber(){ void Main(){ Shot(); var x = Fiber(); yield return 0; x.MoveNext(); Shot(); Hoge(); Shot(); x.MoveNext(); yield return 0; x.MoveNext(); yield return 0; x.MoveNext(); } }
8.
実行のイメージ // 定義
// 呼び出し IEnumerator Fiber(){ void Main(){ Shot(); var x = Fiber(); yield return 0; x.MoveNext(); Shot(); Hoge(); Shot(); x.MoveNext(); yield return 0; x.MoveNext(); yield return 0; x.MoveNext(); } }
9.
例(C#) ゲームで敵キャラクターの制御をしたい
• 下へ移動 void Update(){ • 2秒待つ 下へ移動; • 5回繰り返す 2秒待つ; • 弾を撃つ 5回繰り返す { • 1秒待つ 弾を撃つ; 1秒待つ; } } 理想
10.
例(C#) ゲームで敵キャラクターの制御をしたい
• 下へ移動 void Update(){ • 2秒待つ 下へ移動; • 5回繰り返す 2秒待つ; • 弾を撃つ 5回繰り返す { • 1秒待つ 弾を撃つ; ここで処理を止めたいけど、 1秒待つ; この関数を抜けないと他の関数の処理ができず } ゲーム全体が止まってしまう! } 理想 現実
11.
例(C#) そこでコルーチン
ここでは1秒 = 60フレーム IEnumerator Update(){ 下へ移動; for( int i = 0; i < 120; ++i ) void 2秒待つ // Update(){ yield return 0; 下へ移動; for( int i = 0; i < 5; ++i ){ 2秒待つ; 弾を撃つ; 5回繰り返す for( int j = 0; j < 60; ++j ) // 1秒待つ{ yield return 0; 弾を撃つ; } 1秒待つ; } } }
12.
コルーチンなしだと 毎フレーム呼び出してもらうしかない
ここでは1秒 = 60フレーム int t = 0; カウンターが必要 void Update(){ if( t == 0 ){ 下へ移動; for文も使えないので、変な条件式を書く } if( t >= 120 && ( t – 120 ) % 60 == 0 && t < 120 + 60 * 5 ){ 弾を撃つ; } ++t; 時間を絶対的に指定 }
13.
使い道 • RPGの戦闘シーンなど •
プレイヤーの作戦が決まるまで戦闘の進行を止める • エフェクトの表示が終わるまで戦闘の進行を止める • 状態のシーケンスの管理 • 敵が歩いて登場する状態 → 攻撃する状態 → 攻撃が終わって退場する状態 • 遅延評価 • 呼び出しが達するまで計算しないことで無駄を省く • 無限の量の計算を途中で打ち切る • ジェネレータ(値を列挙する)
14.
使い道:遅延評価 IEnumerator Fiber(){
void Main(){ Func(); var x = Fiber(); yield return 0; x.MoveNext(); Func(); x.MoveNext(); yield return 0; } HeavyFunc(); // 実行されない yield return 0; }
15.
使い道:ジェネレータ IEnumerator Fiber(){
void Main(){ yield return 3; var x = Fiber(); yield return 1; x.MoveNext(); yield return 4; x.Current; // 3 x.MoveNext(); yield return 1; x.Current; // 1 yield return 5; x.MoveNext(); } x.Current; // 4 }
16.
コルーチンを使える言語機能 • C#のイテレータ • Luaのコルーチン •
Pythonのジェネレータ • Rubyのファイバー • 東方弾幕風スクリプトのマイクロスレッド • (まだあるかも)
17.
ありがとうございました