Skip to content

Commit 932bf35

Browse files
committed
revamped the collision example into a sprite benchmark example
1 parent 092b700 commit 932bf35

18 files changed

+205
-130
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import { DebugPanelPlugin } from "@melonjs/debug-plugin";
2+
import {
3+
ScaleMethods,
4+
device,
5+
event,
6+
game,
7+
input,
8+
loader,
9+
plugin,
10+
video,
11+
} from "melonjs";
12+
import { createExampleComponent } from "../utils";
13+
import { Fruit } from "./Fruit";
14+
import { assets } from "./assets";
15+
16+
const FRUIT_STEP = 50;
17+
18+
function addFruits(numberOfFruits: number, fruitType?: string) {
19+
const selectedFruitType =
20+
fruitType || assets[Math.floor(Math.random() * assets.length)].name;
21+
for (let i = 0; i < numberOfFruits; i++) {
22+
game.world.addChild(new Fruit(selectedFruitType));
23+
}
24+
}
25+
26+
const createGame = () => {
27+
// Initialize the video.
28+
if (
29+
!video.init(1024, 768, {
30+
scaleMethod: ScaleMethods.Flex,
31+
renderer: video.AUTO,
32+
transparent: false,
33+
})
34+
) {
35+
alert("Your browser does not support HTML5 canvas.");
36+
return;
37+
}
38+
39+
// register the debug plugin
40+
plugin.register(DebugPanelPlugin, "debugPanel");
41+
42+
// load our monster image and populate the game world
43+
loader.preload(assets, () => {
44+
// add some keyboard shortcuts
45+
event.on(event.KEYDOWN, (_, keyCode) => {
46+
// toggle fullscreen on/off
47+
if (keyCode === input.KEY.F) {
48+
if (!device.isFullscreen) {
49+
device.requestFullscreen();
50+
} else {
51+
device.exitFullscreen();
52+
}
53+
}
54+
55+
if (keyCode === input.KEY.ENTER || keyCode === input.KEY.SPACE) {
56+
addFruits(FRUIT_STEP);
57+
}
58+
});
59+
60+
// register on pointer down
61+
input.registerPointerEvent("pointerdown", game.viewport, () => {
62+
addFruits(FRUIT_STEP);
63+
});
64+
65+
// reset/empty the game world
66+
game.world.reset();
67+
68+
addFruits(FRUIT_STEP, "watermelon");
69+
});
70+
};
71+
72+
export const ExampleBenchmark = createExampleComponent(createGame);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { Sprite, game, math } from "melonjs";
2+
3+
export class Fruit extends Sprite {
4+
gravity: number;
5+
speedX: number;
6+
speedY: number;
7+
8+
constructor(fruitType: string) {
9+
super(
10+
math.random(-15, game.viewport.width),
11+
math.random(-15, game.viewport.height),
12+
{
13+
image: fruitType,
14+
},
15+
);
16+
17+
this.gravity = 0.9;
18+
this.speedX = Math.random() * 10;
19+
this.speedY = Math.random() * 10 - 5;
20+
this.alwaysUpdate = true;
21+
}
22+
23+
override update() {
24+
const viewport = game.viewport;
25+
const pos = this.pos;
26+
27+
pos.x += this.speedX;
28+
pos.y += this.speedY;
29+
this.speedY += this.gravity;
30+
31+
if (pos.x > viewport.right) {
32+
this.speedX *= -1;
33+
pos.x = viewport.right;
34+
} else if (pos.x < viewport.left) {
35+
this.speedX *= -1;
36+
pos.x = viewport.left;
37+
}
38+
39+
if (pos.y > viewport.bottom) {
40+
this.speedY *= -0.85;
41+
pos.y = viewport.bottom;
42+
const rand = Math.random();
43+
if (rand > 0.5) {
44+
this.speedY -= rand * 6;
45+
}
46+
} else if (pos.y < viewport.top) {
47+
this.speedY = 0;
48+
pos.y = viewport.top;
49+
}
50+
51+
return true;
52+
}
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import AppleGreenPng from "./assets/Apple_Green.png";
2+
import AppleRedPng from "./assets/Apple_Red.png";
3+
import AppleYellowPng from "./assets/Apple_Yellow.png";
4+
import BananaPng from "./assets/Banana.png";
5+
import BerryPng from "./assets/Berry.png";
6+
import CherryPng from "./assets/Cherry.png";
7+
import LemonPng from "./assets/Lemon.png";
8+
import LimePng from "./assets/Lime.png";
9+
import OrangePng from "./assets/Orange.png";
10+
import PearPng from "./assets/Pear.png";
11+
import PlumPng from "./assets/Plum.png";
12+
import WatermelonPng from "./assets/Watermelon.png";
13+
14+
export const assets = [
15+
{
16+
name: "apple_green",
17+
type: "image",
18+
src: AppleGreenPng,
19+
},
20+
{
21+
name: "apple_red",
22+
type: "image",
23+
src: AppleRedPng,
24+
},
25+
{
26+
name: "apple_yellow",
27+
type: "image",
28+
src: AppleYellowPng,
29+
},
30+
{
31+
name: "banana",
32+
type: "image",
33+
src: BananaPng,
34+
},
35+
{
36+
name: "berry",
37+
type: "image",
38+
src: BerryPng,
39+
},
40+
{
41+
name: "cherry",
42+
type: "image",
43+
src: CherryPng,
44+
},
45+
{
46+
name: "lemon",
47+
type: "image",
48+
src: LemonPng,
49+
},
50+
{
51+
name: "line",
52+
type: "image",
53+
src: LimePng,
54+
},
55+
{
56+
name: "orange",
57+
type: "image",
58+
src: OrangePng,
59+
},
60+
{
61+
name: "pear",
62+
type: "image",
63+
src: PearPng,
64+
},
65+
{
66+
name: "plum",
67+
type: "image",
68+
src: PlumPng,
69+
},
70+
{
71+
name: "watermelon",
72+
type: "image",
73+
src: WatermelonPng,
74+
},
75+
];
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading

packages/examples/src/examples/collisionTest/ExampleCollisionTest.tsx

-125
This file was deleted.
Binary file not shown.

packages/examples/src/main.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import React, { type ReactElement } from "react";
22
import ReactDOM from "react-dom/client";
3+
import "./index.css";
34
import { Link, RouterProvider, createBrowserRouter } from "react-router-dom";
45
import { ExampleAseprite } from "./examples/aseprite/ExampleAseprite";
5-
import { ExampleCollisionTest } from "./examples/collisionTest/ExampleCollisionTest";
6-
import "./index.css";
6+
import { ExampleBenchmark } from "./examples/benchmark/ExampleBenchmark";
77
import { ExampleDeviceTest } from "./examples/deviceTest/ExampleDeviceTest";
88
import { ExampleDragAndDrop } from "./examples/dragAndDrop/ExampleDragAndDrop";
99
import { ExampleGraphics } from "./examples/graphics/ExampleGraphics";
@@ -21,9 +21,9 @@ const examples: { label: string; path: string; component: ReactElement }[] = [
2121
path: "aseprite",
2222
},
2323
{
24-
component: <ExampleCollisionTest />,
25-
label: "collision test",
26-
path: "collision-test",
24+
component: <ExampleBenchmark />,
25+
label: "Sprite benchmark",
26+
path: "benchmark",
2727
},
2828
{
2929
component: <ExampleDeviceTest />,

0 commit comments

Comments
 (0)