質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

572閲覧

JavaScriptのcanvas内でのマップスクロールのやり方がわかりません。

nano_09

総合スコア15

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/10/07 09:25

編集2020/10/07 10:02

前提・実現したいこと

JavaScriptでちょっとしたゲームを作っているのですが、マップスクロールの方法がわからなかった為、translateでキャラが特定の位置に来たらマップをずらすという方法を取っていました。
配列が0番目から取得されるため右、下にずらすだけならできるのですが、上と左にずらす方法がわかりません。

マップスクロール、もしくはtranslateでのマップスクロールの方法を教えてください。
ちなみにcanvas内で作っています。

該当のソースコード

javascript

1var canvas = document.getElementById('canvas'); 2canvas.width = 320; 3canvas.height = 256; 4var Human = new Object(); 5Human.img = new Image(); 6Human.img.src = 'キャラの画像'; 7Human.x = 0; 8Human.y = 0; 9Human.move = 0; 10 11var positionX = 0 12 13var ctx = canvas.getContext('2d'); 14 15var map = [ 160,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 170,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 180,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 190,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 200,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 210,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 220,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 230,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 240,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 250,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 26]; 27 28function main(){ 29ctx.fillStyle = "rgb( 0, 0, 0 )"; 30ctx.fillRect(0, 0, 480, 320); 31 32for (var y=0; y<map.length; y++) { 33 for (var x=0; x<map[y].length; x++) { 34 if (map[y][x] === 0) 35 ctx.drawImage(mapchip,16,160,32,32,32*x,32*y,32,32); 36} 37} 38ctx.drawImage(Human.img, Human.x, Human.y); 39 40window.addEventListener("keydown", keydownfunc, false); 41window.addEventListener("keyup", keyupfunc, false); 42 43if ( Human.move === 0 ) { 44 if ( key.right === true ) { 45 var x = Human.x/32; 46 var y = Human.y/32; 47 if(Human.x === 256 && positionX === 0){ 48 ctx.translate(-32,0); 49 positionX = 1; 50 }else if(Human.x === 288 && positionX === 1){ 51 ctx.translate(-32,0); 52 positionX = 2; 53 } 54 if (map[y][x] === 0) { 55 Human.move = 32; 56 key.push = 'right'; 57 } 58 } 59 } 60} 61 62if (Human.move > 0) { 63 Human.move -= 4; 64if ( key.push === 'right' ) Human.x += 4; 65} 66window.requestAnimationFrame( main ); 67} 68window.addEventListener('load', main(), false); 69 70function keydownfunc( event ) { 71var key_code = event.keyCode; 72if(key_code === 39){ 73key.right = true; 74Human.img.src = 'キャラが右を向く画像'; 75} 76event.preventDefault(); 77} 78 79function keyupfunc( event ) { 80var key_code = event.keyCode; 81if(key_code === 39) key.right = false; 82} 83 84キャラを動かすコードですが、右だけ書いています。ほかの方角もこの書き方で書いています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/10/07 09:38

「右、下にずらす」はどこで実現されていますか?
nano_09

2020/10/07 10:05 編集

この返信は追加した文を質問のところに移したため削除しました。
m.ts10806

2020/10/07 09:54

質問は編集できます。追記願います。 1つ言えるのは、座標的には「右、下」はプラス方向、「上、左」はマイナス方向 ということですね(おそらく認識はあるとは思いますが)
nano_09

2020/10/07 10:04

追加しました。 はい、それはわかります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問