# enchant.js 宿題2-4
## 課題4: 魚の動きと衝突判定の設定
### タスク
・魚のスプライトに対し、上下左右のキーが押されたときの動きを設定します。
・魚と鮫のスプライトが重なったとき(衝突したとき)にゲームオーバーシーンに遷移するよう設定します。
### ヒント
・スプライトの位置はxとyプロパティを直接変更することで制御します。
・衝突判定はwithin関数を使用して行います。
### 開始コード:
enchant();
window.onload = function () {
const FISH = "res/fish.png";
const HEART = "res/heart.png";
const SHARK = "res/shark.png";
const SEA = "res/Sea.png";
const START = "res/start.png";
const DISP_SIZE = 640;
var core = new Core(DISP_SIZE, DISP_SIZE);
core.preload(FISH, HEART, SHARK, SEA, START);
core.fps = 30;
core.keybind(32, "Space");
core.onload = function () {
var background = new Sprite(640, 481);
background.x = 0;
background.y = 0;
background.scaleX = 1.5;
background.scaleY = 1.5;
background.image = core.assets[SEA];
core.rootScene.addChild(background);
var start = new Sprite(320, 142);
start.x = 150;
start.y = 150;
start.scaleX = 1.0;
start.scaleY = 1.0;
start.image = core.assets[START];
core.rootScene.addChild(start);
core.rootScene.on("enterframe", function (){
if (core.input.Space) {
core.rootScene.removeChild(start);
core.pushScene(playScene);
}
});
var playScene = new Scene();
var background = new Sprite(640, 481);
background.x = 0;
background.y = 0;
background.scaleX = 1.5;
background.scaleY = 1.5;
background.image = core.assets[SEA];
playScene.addChild(background);
var fish = new Sprite(320, 211);
fish.x = 100;
fish.y = 100;
fish.scaleX = 0.5;
fish.scaleY = 0.5;
fish.image = core.assets[FISH];
playScene.addChild(fish);
// ここにコードを追加
}
core.start();
}
function rand(n) {
return Math.floor(Math.random() * (n + 1));
}
<details>
<summary>解答</summary>
enchant();
window.onload = function () {
const FISH = "res/fish.png";
const HEART = "res/heart.png";
const SHARK = "res/shark.png";
const SEA = "res/Sea.png";
const START = "res/start.png";
const DISP_SIZE = 640;
var core = new Core(DISP_SIZE, DISP_SIZE);
core.preload(FISH, HEART, SHARK, SEA, START);
core.fps = 30;
core.keybind(32, "Space");
core.onload = function () {
var background = new Sprite(640, 481);
background.x = 0;
background.y = 0;
background.scaleX = 1.5;
background.scaleY = 1.5;
background.image = core.assets[SEA];
core.rootScene.addChild(background);
var start = new Sprite(320, 142);
start.x = 150;
start.y = 150;
start.scaleX = 1.0;
start.scaleY = 1.0;
start.image = core.assets[START];
core.rootScene.addChild(start);
core.rootScene.on("enterframe", function (){
if (core.input.Space) {
core.rootScene.removeChild(start);
core.pushScene(playScene);
}
});
var playScene = new Scene();
var background = new Sprite(640, 481);
background.x = 0;
background.y = 0;
background.scaleX = 1.5;
background.scaleY = 1.5;
background.image = core.assets[SEA];
playScene.addChild(background);
var fish = new Sprite(320, 211);
fish.x = 100;
fish.y = 100;
fish.scaleX = 0.5;
fish.scaleY = 0.5;
fish.image = core.assets[FISH];
playScene.addChild(fish);
fish.on('enterframe', function () {
if (core.input.up) {
this.y -= 10;
}
if (core.input.down) {
this.y += 10;
}
if (core.input.right) {
this.x += 10;
fish.scaleX = 0.5;
}
if (core.input.left) {
this.x -= 10;
fish.scaleX = -0.5;
}
if (this.within(shark, 70)) {
core.pushScene(gameOverScene);
}
});
}
core.start();
}
function rand(n) {
return Math.floor(Math.random() * (n + 1));
}
</details>