const VIEWPORT_HEIGHT = 400;
const VIEWPORT_WIDTH = 400;
const MAX_BALLS_PER_GROUP = 5;
const PLAYER_SPEED = 5;
const PLAYER_RADIUS = 15;
const BALL_RADIUS = 10;
const BALL_COLOR_ID = ['red', 'blue', 'yellow'];
const MIN_VELOCITY = 15;
const MAX_VELOCITY = 200;
const GAME = new Phaser.Game({
backgroundColor: '#efefef',
height: VIEWPORT_HEIGHT,
parent: 'game',
state: {
preload: preload,
create: create,
update: update,
},
type: Phaser.AUTO,
width: VIEWPORT_WIDTH,
});
let player;
let balls;
let groups = {};
let counter = 0;
function randomVectorPoint() {
return Math.random() * ((VIEWPORT_WIDTH - BALL_RADIUS) - BALL_RADIUS) + BALL_RADIUS;
}
function randomVelocity() {
return Math.random() * (MAX_VELOCITY - MIN_VELOCITY) + MIN_VELOCITY;
}
// New Code
function createBall(group) {
const ball = groups[group].create(
randomVectorPoint(),
randomVectorPoint(),
'ball',
BALL_COLOR_ID.indexOf(group),
true
);
ball.anchor.setTo(0.5);
ball.body.collideWorldBounds = true;
ball.body.bounce.set(1);
ball.body.setCircle(BALL_RADIUS);
if (group === 'wild') {
ball.animations.add('flash');
ball.animations.play('flash', 1, true);
ball.body.velocity.setTo(25);
} else {
ball.body.velocity.setTo(randomVelocity());
}
return ball;
}
function preload() {
GAME.load.crossOrigin = 'anonymous';
GAME.load.spritesheet('ball', 'https://practical-bose-75356e.netlify.com/balls.png', 10, 10, 3);
GAME.load.spritesheet('player', 'https://practical-bose-75356e.netlify.com/player.png', 15, 15, 3);
}
function create() {
groups = {
red: GAME.add.group(),
blue: GAME.add.group(),
yellow: GAME.add.group(),
wild: GAME.add.group(),
};
groups.red.enableBody = true;
groups.blue.enableBody = true;
groups.yellow.enableBody = true;
groups.wild.enableBody = true;
for (let i = 0; i < MAX_BALLS_PER_GROUP; i++) {
createBall('red');
createBall('blue');
createBall('yellow');
}
}
function update() {}
This Pen doesn't use any external CSS resources.