際際滷

際際滷Share a Scribd company logo
MPS Setagaya 及7指 (2015/10/11) ミ`ティング
JavaScript でパックマン! 及4指
署徨匆
Morning Project Samurai 旗燕
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
云晩の朕
? パックマンに笥パクさせる!?
- Canvas 貧でのアニメ`ションのgF
? キ`ボ`ドでパックマンを咾す!?
- ブラウザでのキ`ボ`ドイベントのI尖
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
window.requestAnimationFrame()
? ブラウザにアニメ`ションの宙鮫を勣箔?
- 宙鮫のタイミングはブラウザがQ協?
(フレ`ムレ`トをきっちりQめることはできない)
? 哈方に峺協したv方がg佩される?
箭: function drawPackman(timestamp){ ´ }?
window.requestAnimationFrame(drawPackman);
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
window.requestAnimationFrame() ?
によるアニメ`ション
function animation_loop() {
// 宙鮫I尖をここにく
// ´
window.requestAnimationFrame(animation_loop);
}
window.requestAnimationFrame(animation_loop);
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
window.requestAnimationFrame() ?
によるアニメ`ション
function animation_loop() {
// 宙鮫I尖をここにく
// ´
window.requestAnimationFrame(animation_loop);
}
window.requestAnimationFrame(animation_loop);
これから恬るところ
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
笥パクまでの祇のり
1. 返咾妊僖パクできるようにする
2. 徭咾妊僖パクさせる
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
Step1. 返咾膿撻僖!
var cv = document.getElementById(`pac-man');
var ctx = cv.getContext("2d");
function drawPacman(ctx ,cx, cy){
ctx.strokeStyle="#FF0000";
ctx.?llStyle="#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.?ll();
}
drawPacman(ctx, 50, 50);
θ=30
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
Step1. 返咾膿撻僖!
var cv = document.getElementById(`pac-man');
var ctx = cv.getContext("2d");
function drawPacman(ctx ,cx, cy, theta){
ctx.strokeStyle="#FF0000";
ctx.?llStyle="#FF0000";
ctx.beginPath();
ctx.arc(cx, cy, 50, theta * Math.PI / 180, ?
(360 - theta) * Math.PI / 180);
ctx.lineTo(cx, cy);
ctx.lineTo(cx + 50 * Math.cos(theta * Math.PI / 180), ?
cy + 50 * Math.sin(theta * Math.PI / 180));
ctx.?ll();
}
drawPacman(ctx, 50, 50, 30);
drawPacman(ctx, 150, 50, 10);
θ=theta
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
Step2. 徭咾妊僖パクさせる
var cv = document.getElementById(`pac-man');
var ctx = cv.getContext("2d");
var cx = 50, cy = 50, theta = 30, dTheta = -1;
function drawPacman(ctx ,cx, cy, theta){ ´ }
function animationLoop(timestamp) {
if (theta >= 30) dTheta = -1;?
else if (theta <=0 ) dTheta = 1;?
theta += dTheta;
ctx.clearRect(0, 0, cv.width, cv.height);
drawPacman(ctx, cx, cy, theta);
window.requestAnimationFrame(animationLoop);
}
window.requestAnimationFrame(animationLoop);MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
パックマン荷恬までの祇のり
? キ`兀和イベント (onkeydown) に鬉垢?
イベントI尖v方を恬り鞠h
? キ`がxされたイベント (onkeyup) に?
鬉垢襯ぅ戰鵐I尖v方を恬り鞠h
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
ユ`ザ`の秘薦とイベント
? ブラウザはブラウザ貧でのユ`ザ`の荷恬をイベント?
として函りQう?
- 箭: マウスのクリック、キ`の兀和
? ブラウザはvBする勣殆へとイベントを宥岑
? プログラマは勣殆にし、JavaScript を喘いて?
イベントへのI圭を並念鞠h (イベントハンドラの鞠h)
? 勣殆はイベントを鞭け函ると鬉垢覽賠hされた?
イベントハンドラを軟咾垢
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
イベントI尖の送れ
ブラウザキャンバス勣殆 cv
キ`が
兀和された!
フォ`カスは?
Canvas勣殆
キ`を兀和cv.onkydown に鞠hされた
イベントハンドラでIするぜ !
ユ`ザ`
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
イベントの箭
? onkeydown: キ`の兀和イベント
? onkeyup: キ`がxされたイベント
? onmousedown: マウスのボタンが兀和された
? onmouseup: マウスのボタンがxされた
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
勣殆へのイベントハンドラの鞠h
cv.tabIndex = 1;
cv.onkeydown = function(event) {
event.preventDefault();
switch(event.keyCode) {
case 37:?
cx -= 1; break;
case 38:
cy -= 1; break;
case 39:
cx += 1; break;
case 40:?
cy += 1; break;
}
};
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
なんだかカクカク咾???
ブラウザ
Canvas
cx, cy
キ`兀和k伏!
了崔厚仟!
イベントハンドラによる
cx, cy の厚仟に児づく宙鮫
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
なんだかカクカク咾???
イベントハンドラによる
cx, cy の厚仟に児づく宙鮫
ブラウザ
Canvas
cx, cy
キ`兀和k伏!
了崔厚仟!イベントハンドラが?
K阻するたびに
卞咾盻K阻してしまう!
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
錆らかに咾す垢健
movingDirectionに児づき
cx, cy を厚仟して宙鮫
ブラウザ
Canvas
movingDirection[0] = 1
movingDirection[1] = 0
キ`兀和k伏!
卞啻晋仟!匯業卞啻燭Qめれば、
仟たに onkeydown イベントが
軟こらなくてもパックマンが
卞咾珪Aける!! MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
個措井 onkeydown イベントハンドラ
var moveDirection = [0, 0] //x, y
cv.tabIndex = 1;
cv.onkeydown = function(event) {
event.preventDefault();
switch(event.keyCode) {
case 37:
moveDirection[0] = -1; break;
case 38:
moveDirection[1] = -1; break;
case 39:
moveDirection[0] = 1; break;
case 40:
moveDirection[1] = 1;
}
}; MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
個措井 宙鮫v方
function animationLoop(timestamp) {
if (theta >= 30) dTheta = -1;?
else if (theta <=0 ) dTheta = 1;?
theta += dTheta;
cx += moveDirection[0];
cy += moveDirection[1];
ctx.clearRect(0, 0, cv.width, cv.height);
drawPacman(ctx, cx, cy, theta);
window.requestAnimationFrame(animationLoop);
}
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
錆らかに咾が峭まらない !!
onkeyup イベントハンドラの嶄で
キ`がxされたら鬉垢觀熟鬚厘啻燭0にする
MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko
cv.onkeyup = function(event) {
event.preventDefault();
switch(event.keyCode) {
case 37:
moveDirection[0] = 0;
break;
case 38:
moveDirection[1] = 0;
break;
case 39:
moveDirection[0] = 0;
break;
case 40:
moveDirection[1] = 0;
}
}; MPS Setagaya 及7指 (2015/10/11) ミ`ティング (c) Junya Kaneko

More Related Content

JavaScript でパックマンゝ4指