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

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

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

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

Q&A

0回答

1016閲覧

JavaScript 当たり判定

yuu_1033

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2021/07/14 05:40

JavaScriptでピンポンゲームを作っています。
ボールと障害物の四角形の当たり判定をしたいんですがどのようにすればいいのか分かりません。私はdraw()の中にある当たり判定を使ってやろうとしましたがそうすると、四角形の当たり判定を四角形を一個づつ判定処理を入れなければならないと考えそうすると、処理が多くなると思いました。
drawBricks()で四角形を10個canvasに書いてあります。この10個の四角形を全て、当たり判定を一つの処理で渡すことは出来るのでしょうか。
ご教授お願い致します。

JavaScript

1window.onload = init_time; 2 3let timerID = window.setInterval(every_time, 50); 4let width=480; 5let height=320; 6let cacvas; 7let cvs; 8let x,y; 9let dx,dy; //移動量 10let px,py; 11let init_done=0; 12let ballRadius=10; //ball大きさ 13 14let paddleHeight=10; 15let paddleWidth=120; 16let paddleX=(width-paddleWidth)/2; 17let rightPressed=false; 18let leftPressed=false; 19//let brickRowCount = 5; 20//let brickColumnCount = 3; 21//let brickWidth = 20; 22//let brickHeight = 20; 23//let brickPadding = 10; 24//let brickOffsetTop = 30; 25//let brickOffsetLeft = 30; 26let score = 0; 27let interval=setInterval(draw,20); 28let paddleZ=width-20; 29 30function init_time(){ 31 canvas = document.getElementById("canvas1"); 32 cvs = canvas.getContext("2d"); 33 x=width/2; 34 y=height-30; 35 dx=4; 36 dy=-4; 37 px=240; 38 py=0; 39 40 init_done=1; 41} 42 43function every_time(){ 44 if(init_done!=1){ 45 return; 46 } 47 48 cvs.fillStyle="#a0a0a0"; 49 cvs.fillRect(0,0,480,320); 50 51 draw(); 52 draw2(); 53 54} 55 56function drawBall(){ 57 cvs.beginPath(); 58 cvs.arc(x,y,ballRadius,0,Math.PI*2); 59 cvs.fillStyle = "green"; 60 cvs.fill(); 61 cvs.closePath(); 62} 63 64 65function draw(){ 66 drawBricks(); 67 drawBall(); 68 hantei(); 69 drawPaddle(); 70 drawScore(); 71 72 73 if(x+dx>width-ballRadius || x+dx<ballRadius){ 74 dx=-dx; 75 } 76 if(y+dy>height-ballRadius || y+dy<ballRadius){ 77 dy=-dy; 78 } 79 80 if(y+dy<ballRadius){ 81 dy=-dy; 82 }else if(y+dy > height-paddleHeight-ballRadius){ 83 if(x > paddleX && x < paddleX+paddleWidth){ 84 dy=-dy; 85 }else{ 86 alert("you lose...") 87 document.location.reload(); 88 clearInterval(interval); 89 } 90 } 91 if(rightPressed && paddleX < width-paddleWidth){ 92 paddleX+=3; 93 }else if(leftPressed && paddleX > 0){ 94 paddleX-=3; 95 } 96 x+=dx; 97 y+=dy; 98} 99 100 101let bricks=[]; 102for(let a=0;a < brickColumnCount;a++){ 103 bricks[a]=[]; 104 for(let b=0;b < brickRowCount;b++){ 105 bricks[a][b]={x:0, y:0, status:10}; 106 } 107} 108 109 110document.addEventListener("keydown",keyDownHandler,false); 111document.addEventListener("keyup",keyUpHandler,false); 112 113function keyDownHandler(e){ 114 if(e.key=="Right" || e.key=="ArrowRight"){ 115 rightPressed=true; 116 } 117 else if(e.key=="Left" || e.key=="ArrowLeft"){ 118 leftPressed=true; 119 } 120} 121 122 123function keyUpHandler(e){ 124 if(e.key=="Right" || e.key=="ArrowRight"){ 125 rightPressed=false; 126 } 127 else if(e.key=="Left" || e.key=="ArrowLeft"){ 128 leftPressed=false; 129 } 130} 131 132 133function drawPaddle(){ 134 cvs.beginPath(); 135 cvs.rect(paddleX,height-paddleHeight,paddleWidth,paddleHeight); 136 cvs.fillStyle = "blue"; 137 cvs.fill(); 138 cvs.closePath(); 139} 140 141 142function drawBricks(){ 143 cvs.beginPath(); 144 cvs.rect(200,20 , brickWidth, brickHeight); 145 cvs.rect(360,20 , brickWidth, brickHeight); 146 cvs.rect(240,20 , brickWidth, brickHeight); 147 cvs.rect(20,100 , brickWidth, brickHeight); 148 cvs.rect(360,100 , brickWidth, brickHeight); 149 cvs.rect(240,100 , brickWidth, brickHeight); 150 cvs.rect(20,200 , brickWidth, brickHeight); 151 cvs.rect(140,200 , brickWidth, brickHeight); 152 cvs.rect(240,200 , brickWidth, brickHeight); 153 cvs.rect(360,200 , brickWidth, brickHeight); 154 cvs.fillStyle = "black"; 155 cvs.fill(); 156 cvs.closePath(); 157} 158 159 160function drawScore(){ 161 cvs.font="16px Arial"; 162 cvs.fillStyle="blue"; 163 cvs.fillText("点数:"+score, 8, 20); 164} 165 166function draw2(){ 167 drawPaddle(); 168 169 170 if(rightPressed){ 171 paddleX+=10; 172 if(paddleX+paddleWidth > width){ 173 paddleX=width-paddleWidth; 174 } 175 } 176 else if(leftPressed){ 177 paddleX-=10; 178 if(paddleX<0){ 179 paddleX=0; 180 } 181 } 182}

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

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

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

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

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

yambejp

2021/07/14 05:43

現状の動作がわかるものをcodepenなどどこか 実行できるサイトにアップして下さい
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問