Submit Search
JavaScript でパックマン!第3回
0 likes
810 views
Project Samurai
JavaScript と HTML5 で新たに導入された Canvas を用いてパックマンを作ります。MPS Setagaya 第6回(2015/09/27) ミーティング資料です。
Software
Read more
1 of 40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
More Related Content
PDF
JavaScript でパックマン!第6回
Project Samurai
PDF
JavaScript でパックマン! 第2回
Project Samurai
PDF
JavaScript で パックマン! 第5回
Project Samurai
PDF
JavaScript でパックマン!第7回 (一旦最終回)
Project Samurai
PDF
JavaScript でパックマン!第1回
Project Samurai
PDF
JavaScript でパックマン!第4回
Project Samurai
PPTX
VRボドゲ実装の話
MaxNeetGames
PPTX
プログラミング技法特論第8回
Noritada Shimizu
JavaScript でパックマン!第6回
Project Samurai
JavaScript でパックマン! 第2回
Project Samurai
JavaScript で パックマン! 第5回
Project Samurai
JavaScript でパックマン!第7回 (一旦最終回)
Project Samurai
JavaScript でパックマン!第1回
Project Samurai
JavaScript でパックマン!第4回
Project Samurai
VRボドゲ実装の話
MaxNeetGames
プログラミング技法特論第8回
Noritada Shimizu
What's hot
(11)
PPTX
論理指向とプログラミング2010年度秋学期第9回
Noritada Shimizu
ODP
ggplot2 110129
Takashi Minoda
PDF
【Unite Tokyo 2018】誘導ミサイル完全マスター
Unity Technologies Japan K.K.
PDF
Tsukuba
syou6162
PDF
ggplot2 110129
Takashi Minoda
PDF
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
UnityTechnologiesJapan002
PPTX
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
Unity Technologies Japan K.K.
PPTX
CG2013 02
shiozawa_h
PPTX
CG2013 07
shiozawa_h
PPTX
CG2013 05
shiozawa_h
PPTX
CG2013 03
shiozawa_h
論理指向とプログラミング2010年度秋学期第9回
Noritada Shimizu
ggplot2 110129
Takashi Minoda
【Unite Tokyo 2018】誘導ミサイル完全マスター
Unity Technologies Japan K.K.
Tsukuba
syou6162
ggplot2 110129
Takashi Minoda
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
UnityTechnologiesJapan002
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
Unity Technologies Japan K.K.
CG2013 02
shiozawa_h
CG2013 07
shiozawa_h
CG2013 05
shiozawa_h
CG2013 03
shiozawa_h
Ad
More from Project Samurai
(20)
PDF
数学的基礎から学ぶ Deep Learning (with Python) Vol. 12
Project Samurai
PDF
Python で画像処理をやってみよう! -SIFT 第7回-
Project Samurai
PDF
数学的基礎から学ぶ Deep Learning (with Python) Vol. 9
Project Samurai
PDF
Python で画像処理をやってみよう! -SIFT 第6回-
Project Samurai
PDF
数学的基礎から学ぶ Deep Learning (with Python) Vol. 8
Project Samurai
PDF
数学的基礎から学ぶ Deep Learning (with Python) Vol. 7
Project Samurai
PDF
Python で画像処理をやってみよう! -SIFT 第5回-
Project Samurai
PDF
数学的基礎から学ぶ Deep Learning (with Python) Vol. 6
Project Samurai
PDF
Mpsy20160423
Project Samurai
PDF
Make your Artificial Intelligence
Project Samurai
PDF
数学的基礎から学ぶ Deep Learning (with Python) Vol. 4
Project Samurai
PDF
数学的基礎から学ぶ Deep Learning (with Python) Vol. 3
Project Samurai
PDF
数学的基礎から学ぶ Deep Learning (with Python) Vol. 2
Project Samurai
PDF
数学的基礎から学ぶ Deep Learning (with Python) Vol. 1
Project Samurai
PDF
Python で画像処理をやってみよう!第11回 - SIFT Vol.1 キーポイント候補 -
Project Samurai
PDF
Instagram API を使ってウェブアプリを作ろう!
Project Samurai
PDF
Pythonで画像処理をやってみよう!第8回 - Scale-space 第7回 -
Project Samurai
PDF
Pythonで画像処理をやってみよう!第7回 - Scale-space 第6回 -
Project Samurai
PDF
Pythonで画像処理をやってみよう!第6回 - Scale-space 第3回 -
Project Samurai
PDF
Python で OAuth2 をつかってみよう!
Project Samurai
数学的基礎から学ぶ Deep Learning (with Python) Vol. 12
Project Samurai
Python で画像処理をやってみよう! -SIFT 第7回-
Project Samurai
数学的基礎から学ぶ Deep Learning (with Python) Vol. 9
Project Samurai
Python で画像処理をやってみよう! -SIFT 第6回-
Project Samurai
数学的基礎から学ぶ Deep Learning (with Python) Vol. 8
Project Samurai
数学的基礎から学ぶ Deep Learning (with Python) Vol. 7
Project Samurai
Python で画像処理をやってみよう! -SIFT 第5回-
Project Samurai
数学的基礎から学ぶ Deep Learning (with Python) Vol. 6
Project Samurai
Mpsy20160423
Project Samurai
Make your Artificial Intelligence
Project Samurai
数学的基礎から学ぶ Deep Learning (with Python) Vol. 4
Project Samurai
数学的基礎から学ぶ Deep Learning (with Python) Vol. 3
Project Samurai
数学的基礎から学ぶ Deep Learning (with Python) Vol. 2
Project Samurai
数学的基礎から学ぶ Deep Learning (with Python) Vol. 1
Project Samurai
Python で画像処理をやってみよう!第11回 - SIFT Vol.1 キーポイント候補 -
Project Samurai
Instagram API を使ってウェブアプリを作ろう!
Project Samurai
Pythonで画像処理をやってみよう!第8回 - Scale-space 第7回 -
Project Samurai
Pythonで画像処理をやってみよう!第7回 - Scale-space 第6回 -
Project Samurai
Pythonで画像処理をやってみよう!第6回 - Scale-space 第3回 -
Project Samurai
Python で OAuth2 をつかってみよう!
Project Samurai
Ad
JavaScript でパックマン!第3回
1.
MPS Setagaya 第6回
(2015/09/27) ミーティング JavaScript でパックマン! 第3回 金子純也 Morning Project Samurai 代表 MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
2.
今日の目標 JS のパスについてさらに理解する! JS でパックマンを動かす準備! (関数の理解) MPS
Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
3.
前回描いたパックマン MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
4.
arc() arc(中心x, 中心y, 半径,
開始角度, 終了角度, 反時計回り) * 開始角度、終了角度はラジアンで指定 (360度 = 2 * Math.PI ラジアン) ctx.arc(100, 100, 50, 0, 1/2 * Math.PI, true); ctx.arc(100, 100, 50, 0, 1/2 * Math.PI, false); MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
5.
arc を使ったパックマンの描画 • ヒント1 白い扇形を赤い丸に重ねてやればいい!! •
ヒント2 扇形はどうやって作ればいい?? + MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
6.
var cv =
document.getElementById(‘pac-man'); var ctx = cv.getContext("2d"); ctx.strokeStyle="#FF0000"; ctx.fillStyle="#FF0000"; ctx.beginPath(); ctx.arc(100, 100, 50, 0, 2 * Math.PI); ctx.fill(); ctx.strokeStyle="#FFFFFF"; ctx.fillStyle="#FFFFFF"; ctx.lineWidth=3; ctx.beginPath(); ctx.arc(100, 100, 50, -30 * Math.PI/180, 30 * Math.PI/180) ctx.moveTo(100, 100); ctx.lineTo(100 + 50 * Math.cos(-30 * Math.PI/180), 100 + 50 * Math.sin(-30 * Math.PI/180)); ctx.lineTo(100 + 50 * Math.cos(30 * Math.PI/180), 100 + 50 * Math.sin(30 * Math.PI/180)); ctx.stroke(); ctx.fill(); MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
7.
var cv =
document.getElementById(‘pac-man'); var ctx = cv.getContext("2d"); ctx.strokeStyle="#FF0000"; ctx.fillStyle="#FF0000"; ctx.beginPath(); ctx.arc(100, 100, 50, 0, 2 * Math.PI); ctx.fill(); ctx.strokeStyle="#FFFFFF"; ctx.fillStyle="#FFFFFF"; ctx.lineWidth=3; ctx.beginPath(); ctx.arc(100, 100, 50, -30 * Math.PI/180, 30 * Math.PI/180) ctx.moveTo(100, 100); ctx.lineTo(100 + 50 * Math.cos(-30 * Math.PI/180), 100 + 50 * Math.sin(-30 * Math.PI/180)); ctx.lineTo(100 + 50 * Math.cos(30 * Math.PI/180), 100 + 50 * Math.sin(30 * Math.PI/180)); ctx.stroke(); ctx.fill(); 赤い円を描画 MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
8.
var cv =
document.getElementById(‘pac-man'); var ctx = cv.getContext("2d"); ctx.strokeStyle="#FF0000"; ctx.fillStyle="#FF0000"; ctx.beginPath(); ctx.arc(100, 100, 50, 0, 2 * Math.PI); ctx.fill(); ctx.strokeStyle="#FFFFFF"; ctx.fillStyle="#FFFFFF"; ctx.lineWidth=3; ctx.beginPath(); ctx.arc(100, 100, 50, -30 * Math.PI/180, 30 * Math.PI/180) ctx.moveTo(100, 100); ctx.lineTo(100 + 50 * Math.cos(-30 * Math.PI/180), 100 + 50 * Math.sin(-30 * Math.PI/180)); ctx.lineTo(100 + 50 * Math.cos(30 * Math.PI/180), 100 + 50 * Math.sin(30 * Math.PI/180)); ctx.stroke(); ctx.fill(); 口を描画 MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
9.
var cv =
document.getElementById(‘pac-man'); var ctx = cv.getContext("2d"); ctx.strokeStyle="#FF0000"; ctx.fillStyle="#FF0000"; ctx.beginPath(); ctx.arc(100, 100, 50, 0, 2 * Math.PI); ctx.fill(); ctx.strokeStyle="#FFFFFF"; ctx.fillStyle="#FFFFFF"; ctx.lineWidth=3; ctx.beginPath(); ctx.arc(100, 100, 50, -30 * Math.PI/180, 30 * Math.PI/180) ctx.moveTo(100, 100); ctx.lineTo(100 + 50 * Math.cos(-30 * Math.PI/180), 100 + 50 * Math.sin(-30 * Math.PI/180)); ctx.lineTo(100 + 50 * Math.cos(30 * Math.PI/180), 100 + 50 * Math.sin(30 * Math.PI/180)); ctx.stroke(); ctx.fill(); Pathってなに? MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
10.
パスの例 1 2 3 4 5 6 MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
11.
ctx.beginPath() MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
12.
パスの例 1 2 3 4 5 6 ctx.beginPath() ctx.arc() MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
13.
パスの例 1 2 3 4 5 6 ctx.beginPath() ctx.arc() ctx.linTo() MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
14.
パスの例 1 2 3 4 5 6 ctx.beginPath() ctx.arc() ctx.linTo() . . . ctx.linTo() MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
15.
stroke() 1 2 3 4 5 6 ctx.beginPath() ctx.arc() ctx.linTo() . . . ctx.linTo() ctx.stroke() 実際に線が描かれる MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
16.
パスと色塗りの関係 ctx.beginPath() ctx.arc() ctx.linTo() . . . ctx.linTo() ctx.fill() パスに囲まれた部分が 塗りつぶされる MPS Setagaya
第6回 (2015/09/27) ミーティング (c) Junya Kaneko
17.
パスと色塗りの関係 MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
18.
パスと色塗りの関係 Q. 囲まれてるから? MPS Setagaya
第6回 (2015/09/27) ミーティング (c) Junya Kaneko
19.
この場合は? MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
20.
非ゼロワインディングルール -1 1 1 MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
21.
0 1 MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
22.
MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
23.
パックマンを非ワインディング ルールを考慮して書いてみよう! MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
24.
var cv =
document.getElementById('pacman'); var ctx = cv.getContext("2d"); ctx.strokeStyle="#FF0000"; ctx.fillStyle="#FF0000"; ctx.beginPath(); ctx.arc(100, 100, 50, 30 * Math.PI / 180, 330 * Math.PI / 180); ctx.lineTo(100, 100); ctx.lineTo(100 + 50 * Math.cos(30 * Math.PI / 180), 100 + 50 * Math.sin(30 * Math.PI / 180)); ctx.fill(); MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
25.
アニメーションに必要なこと MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
26.
アニメーションに必要なこと MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
27.
アニメーションに必要なこと MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
28.
アニメーションに必要なこと MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
29.
アニメーションに必要なこと パックマンを何度も何度も描くこと! MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
30.
アニメーションに必要なこと パックマンを何度も何度も描くこと! 何度でも気軽にパックマンを かけないと困る! MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
31.
「パックマンを描く」というJSの命令を 新たにブラウザに教えてやる! (関数を定義する) MPS Setagaya 第6回
(2015/09/27) ミーティング (c) Junya Kaneko
32.
関数 複数の命令をセットにして名前をつけたもの (必要があれば、入力と出力を持つ) 例: パックマンを描く関数 パックマンを描くのに必要な命令をまとめたもの MPS Setagaya
第6回 (2015/09/27) ミーティング (c) Junya Kaneko
33.
関数の例 function drawPacman(ctx) { ctx.strokeStyle="#FF0000"; ctx.fillStyle="#FF0000"; ctx.beginPath(); ctx.arc(100,
100, 50, 30 * Math.PI / 180, 330 * Math.PI / 180); ctx.lineTo(100, 100); ctx.lineTo(100 + 50 * Math.cos(30 * Math.PI / 180), 100 + 50 * Math.sin(30 * Math.PI / 180)); ctx.fill(); } MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
34.
下記関数を<script>の直下に 書いて定義してみよう! function drawPacman(ctx) { ctx.strokeStyle="#FF0000"; ctx.fillStyle="#FF0000"; ctx.beginPath(); ctx.arc(100,
100, 50, 30 * Math.PI / 180, 330 * Math.PI / 180); ctx.lineTo(100, 100); ctx.lineTo(100 + 50 * Math.cos(30 * Math.PI / 180), 100 + 50 * Math.sin(30 * Math.PI / 180)); ctx.fill(); } MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
35.
関数の例 function drawPacman(ctx) { ctx.strokeStyle="#FF0000"; ctx.fillStyle="#FF0000"; ctx.beginPath(); ctx.arc(100,
100, 50, 30 * Math.PI / 180, 330 * Math.PI / 180); ctx.lineTo(100, 100); ctx.lineTo(100 + 50 * Math.cos(30 * Math.PI / 180), 100 + 50 * Math.sin(30 * Math.PI / 180)); ctx.fill(); } 関数の名前 MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
36.
関数の例 function drawPacman(ctx) { ctx.strokeStyle="#FF0000"; ctx.fillStyle="#FF0000"; ctx.beginPath(); ctx.arc(100,
100, 50, 30 * Math.PI / 180, 330 * Math.PI / 180); ctx.lineTo(100, 100); ctx.lineTo(100 + 50 * Math.cos(30 * Math.PI / 180), 100 + 50 * Math.sin(30 * Math.PI / 180)); ctx.fill(); } 関数への入力 MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
37.
使い方 <script> function drawPacman(ctx) { … } var
cv = document.getElementById('pacman'); var ctx = cv.getContext("2d"); drawPacman(ctx); </script> MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
38.
関数を改良してみよう function drawPacman(ctx, cx,
cy) { ctx.strokeStyle="#FF0000"; ctx.fillStyle="#FF0000"; ctx.beginPath(); ctx.arc(cx, cy, 50, 30 * Math.PI / 180, 330 * Math.PI / 180); ctx.lineTo(cx, cy); ctx.lineTo(cx + 50 * Math.cos(30 * Math.PI / 180), cy + 50 * Math.sin(30 * Math.PI / 180)); ctx.fill(); } MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
39.
改良した関数を使って 複数のPacman を描いてみよう! var cv
= document.getElementById('pacman'); var ctx = cv.getContext("2d"); drawPacman(ctx, 50, 50); drawPacman(ctx, 240, 50); drawPacman(ctx, 400, 50); *注意) canvas の width を 500 に変更! MPS Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko
40.
次回 • 今度こそ、パックマンを動かす! • キーボードからの入力を処理する! MPS
Setagaya 第6回 (2015/09/27) ミーティング (c) Junya Kaneko