お世話になっております。
p5.playにて、 上から落ちてくるsprite(果物)を下のsprite(カゴ)で受取るゲームを作成しております。
そこで、下の受け取る方のSprite(カゴ)をジャンプ処理させたいのですが、
if文が効かずか、床(canvasの下)を突き抜けて落ちて行ってしまいます。
(velocityを使っているのですが、heightが0になった時でvelocityが0になりません)
また我儘承知の上ですが、まだ知識があまりないため、できるかぎり以下の【該当コード】のような形式で教えていただけると嬉しいです。
もちろん、そもそもコードの書き方が全く違うということも考えられるのですが…。
コードが見づらいと思いますが、どうぞご教授ください。
【やろうとしていること】
スペースを押したときに、ジャンプ(position.y -=30)して、
そのまま下に落ちる処理(velocity +=0.2)をしています。
if文で、heightより大きくなれば(下に落ちすぎれば)velocityを0にして止める、
という考えの元作成しました。
【該当コード(と思われるところ)のみ】
if(keyDown('space')){ character.position.y -=30; character.velocity.y +=0.2; if(character.position.y > height-70){ character.velocity.y = 0; } }
【全文コード】
var character; var characterImage; var apple; var appleGroup; var mushroom; var mushroomGroup; var score=0; var positionX; var positionY; var gameMode; var timer = 1000; //画像の変数 var appleImage; var mushroomImage; function preload(){ appleImage = loadImage('image/apple.png'); mushroomImage = loadImage('image/mushroom.png'); characterImage = loadImage('image/basket.png'); } function setup(){ createCanvas(1500,800); createCharacter(); createObject(); updateSprites(false); gameMode='gameStart'; } function draw(){ background(200, 220, 230); countTimer(); setupText(); characterControl(); drawSprites(); } function createObject(){ //リンゴを作る appleGroup = new Group; for(var i=0; i<20; i++){ positionX = random(80,width-80); positionY = random(-500*(i/5),-100); apple = createSprite(positionX,positionY); apple.addImage(appleImage); apple.scale=0.5; appleGroup.add(apple); appleGroup[i].velocity.y += random(0.5,2); } //マッシュルームを作る mushroomGroup = new Group; for(var i=0; i<15; i++){ positionX = random(80,width-80); mushroom = createSprite(positionX,random(-500*(i/5),-100)); mushroom.addImage(mushroomImage); mushroom.scale=0.8; mushroomGroup.add(mushroom); mushroomGroup[i].velocity.y += random(0.5,2); } } function characterControl(){ if(keyDown('right')){ if(character.position.x<width-80){ character.position.x +=10; }else{ character.position.x +=0; } }else if(keyDown('left')){ if(character.position.x > 80){ character.position.x -=10; }else{ character.position.x +=0; } } if(keyDown('space')){ character.position.y -=30; character.velocity.y +=0.2; if(character.position.y > height-70){ character.velocity.y = 0; } } character.overlap(appleGroup,catchApple); character.overlap(mushroomGroup,catchMushroom); } //採ったときの、消去/スコア function catchApple(character,apple){ apple.remove(); score +=50; } function catchMushroom(character,mushroom){ mushroom.remove(); score -=100; } //キャラクタークリエイト //コライダー(当たり判定)の可視化 function createCharacter(){ character = createSprite(width/2,height-70); character.addImage(characterImage); character.setCollider('circle',0,0,20); character.debug = true; } //テキスト function setupText(){ if(gameMode == 'gameStart' || gameMode=='gameStop'){ textSize(50); fill(255); text('クリックでゲームかいし!',width/2,height/2); } if(gameMode == 'gameStart' || gameMode=='gameStop' || gameMode=='gamePlaying'){ fill(255); textSize(30); text('SCORE : '+score,1200,100); text(gameMode,1200,150); text(floor(timer/100),1200,200); } } //ゲームモードの入れ替え function mouseClicked(){ if(gameMode=='gameStart' || gameMode=='gameStop'){ gameMode='gamePlaying'; updateSprites(true); }else if(gameMode=='gamePlaying'){ gameMode='gameStop'; updateSprites(false); } } //タイマー function countTimer(){ if(gameMode=='gameStart' || gameMode=='gameStop'){ }else if(gameMode=='gamePlaying'){ timer--; } if(timer < 1){ gameMode='gameFinish'; gameFinish(); } } function gameFinish(){ updateSprites(false); fill(255); textSize(40); text('GAME FINISH',width/2,height/2); text('SCORE'+score,width/2,height/2+50); }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。