Enemy
This commit is contained in:
533
assets/sunny-land-phaser-project/sunny-land/game.js
Normal file
533
assets/sunny-land-phaser-project/sunny-land/game.js
Normal file
@ -0,0 +1,533 @@
|
||||
/*
|
||||
* SUNNY LAND Demo Code
|
||||
* @copyright 2017 Ansimuz
|
||||
* @license {@link https://opensource.org/licenses/MIT | MIT License}
|
||||
* Get free assets and code at: www.pixelgameart.org
|
||||
* */
|
||||
|
||||
var game;
|
||||
var background;
|
||||
var middleground;
|
||||
var gameWidth = 288;
|
||||
var gameHeight = 192;
|
||||
var hurtFlag = false;
|
||||
var hurtTimer;
|
||||
var frogTimer;
|
||||
var frogJumpSide = 'left';
|
||||
|
||||
window.onload = function () {
|
||||
|
||||
game = new Phaser.Game(gameWidth, gameHeight, Phaser.AUTO, "");
|
||||
game.state.add('Boot', boot);
|
||||
game.state.add('Preload', preload);
|
||||
game.state.add('TitleScreen', titleScreen);
|
||||
game.state.add('PlayGame', playGame);
|
||||
//
|
||||
game.state.start("Boot");
|
||||
}
|
||||
|
||||
var boot = function (game) {
|
||||
};
|
||||
boot.prototype = {
|
||||
preload: function () {
|
||||
this.game.load.image('loading', 'assets/sprites/loading.png');
|
||||
},
|
||||
create: function () {
|
||||
game.scale.pageAlignHorizontally = true;
|
||||
game.scale.pageAlignVertically = true;
|
||||
game.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
|
||||
game.renderer.renderSession.roundPixels = true; // no blurring
|
||||
this.game.state.start('Preload');
|
||||
}
|
||||
}
|
||||
|
||||
var preload = function (game) {
|
||||
};
|
||||
preload.prototype = {
|
||||
preload: function () {
|
||||
|
||||
var loadingBar = this.add.sprite(game.width / 2, game.height / 2, 'loading');
|
||||
loadingBar.anchor.setTo(0.5);
|
||||
game.load.setPreloadSprite(loadingBar);
|
||||
// load title screen
|
||||
game.load.image('title', 'assets/sprites/title-screen.png');
|
||||
game.load.image('enter', 'assets/sprites/press-enter-text.png');
|
||||
game.load.image('credits', 'assets/sprites/credits-text.png');
|
||||
game.load.image('instructions', 'assets/sprites/instructions.png');
|
||||
// environment
|
||||
game.load.image('background', 'assets/environment/back.png');
|
||||
game.load.image('middleground', 'assets/environment/middle.png');
|
||||
//tileset
|
||||
game.load.image('tileset', 'assets/environment/tileset.png');
|
||||
game.load.tilemap('map', 'assets/maps/map.json', null, Phaser.Tilemap.TILED_JSON);
|
||||
// atlas sprites
|
||||
game.load.atlasJSONArray('atlas', 'assets/atlas/atlas.png', 'assets/atlas/atlas.json');
|
||||
game.load.atlasJSONArray('atlas-props', 'assets/atlas/atlas-props.png', 'assets/atlas/atlas-props.json');
|
||||
//
|
||||
game.load.audio('music', ['assets/sound/platformer_level03_loop.ogg']);
|
||||
},
|
||||
create: function () {
|
||||
this.game.state.start('TitleScreen');
|
||||
}
|
||||
}
|
||||
|
||||
var titleScreen = function (game) {
|
||||
};
|
||||
titleScreen.prototype = {
|
||||
create: function () {
|
||||
background = game.add.tileSprite(0, 0, gameWidth, gameHeight, 'background');
|
||||
middleground = game.add.tileSprite(0, 80, gameWidth, gameHeight, 'middleground');
|
||||
this.title = game.add.image(game.width / 2, 70, 'title');
|
||||
this.title.anchor.setTo(0.5, 0);
|
||||
var credits = game.add.image(game.width / 2, game.height - 10, 'credits');
|
||||
credits.anchor.setTo(0.5, 1);
|
||||
|
||||
this.pressEnter = game.add.image(game.width / 2, game.height - 35, 'enter');
|
||||
this.pressEnter.anchor.setTo(0.5, 1);
|
||||
|
||||
var startKey = game.input.keyboard.addKey(Phaser.Keyboard.ENTER);
|
||||
startKey.onDown.add(this.startGame, this);
|
||||
|
||||
game.time.events.loop(700, this.blinkText, this);
|
||||
|
||||
this.state = 1;
|
||||
},
|
||||
blinkText: function () {
|
||||
if (this.pressEnter.alpha) {
|
||||
this.pressEnter.alpha = 0;
|
||||
} else {
|
||||
this.pressEnter.alpha = 1;
|
||||
}
|
||||
}
|
||||
|
||||
,
|
||||
update: function () {
|
||||
background.tilePosition.x -= .3;
|
||||
middleground.tilePosition.x -= .6;
|
||||
|
||||
},
|
||||
startGame: function () {
|
||||
if (this.state == 1) {
|
||||
this.state = 2;
|
||||
this.title2 = game.add.image(game.width / 2, 0, 'instructions');
|
||||
this.title2.anchor.setTo(0.5, 0);
|
||||
this.title.destroy();
|
||||
} else {
|
||||
this.game.state.start('PlayGame');
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
var playGame = function (game) {
|
||||
};
|
||||
playGame.prototype = {
|
||||
create: function () {
|
||||
this.createBackgrounds();
|
||||
|
||||
this.createWorld();
|
||||
this.decorWorld();
|
||||
this.createPlayer(54, 9);
|
||||
this.bindKeys();
|
||||
game.camera.follow(this.player, Phaser.Camera.FOLLOW_PLATFORMER);
|
||||
this.populateWorld();
|
||||
|
||||
// music
|
||||
this.music = game.add.audio('music');
|
||||
this.music.loop = true;
|
||||
this.music.play();
|
||||
|
||||
},
|
||||
bindKeys: function () {
|
||||
this.wasd = {
|
||||
jump: game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR),
|
||||
left: game.input.keyboard.addKey(Phaser.Keyboard.LEFT),
|
||||
right: game.input.keyboard.addKey(Phaser.Keyboard.RIGHT),
|
||||
crouch: game.input.keyboard.addKey(Phaser.Keyboard.DOWN)
|
||||
}
|
||||
game.input.keyboard.addKeyCapture(
|
||||
[Phaser.Keyboard.SPACEBAR,
|
||||
Phaser.Keyboard.LEFT,
|
||||
Phaser.Keyboard.RIGHT,
|
||||
Phaser.Keyboard.DOWN]
|
||||
);
|
||||
},
|
||||
|
||||
decorWorld: function () {
|
||||
game.add.image(31 * 16, 4 * 16 + 3, 'atlas-props', 'tree');
|
||||
game.add.image(48 * 16, 3 * 16 + 5, 'atlas-props', 'house');
|
||||
game.add.image(10 * 16, 8 * 16 + 4, 'atlas-props', 'bush');
|
||||
game.add.image(11 * 16, 19 * 16 - 4, 'atlas-props', 'sign');
|
||||
game.add.image(15 * 16, 19 * 16 + 6, 'atlas-props', 'skulls');
|
||||
game.add.image(23 * 16, 19 * 16, 'atlas-props', 'face-block');
|
||||
game.add.image(28 * 16, 20 * 16, 'atlas-props', 'shrooms');
|
||||
},
|
||||
|
||||
populateWorld: function () {
|
||||
// groups
|
||||
this.enemies = game.add.group();
|
||||
this.enemies.enableBody = true;
|
||||
//
|
||||
this.items = game.add.group();
|
||||
this.items.enableBody = true;
|
||||
|
||||
//timer for frog jumps
|
||||
frogTimer = game.time.create(false);
|
||||
frogTimer.loop(2000, this.switchFrogJump, this);
|
||||
frogTimer.start();
|
||||
|
||||
// create items
|
||||
this.createCherry(30, 5);
|
||||
this.createCherry(31, 5);
|
||||
this.createCherry(32, 5);
|
||||
//
|
||||
this.createCherry(23, 17);
|
||||
this.createCherry(24, 17);
|
||||
this.createCherry(25, 17);
|
||||
//
|
||||
this.createGem(3, 6);
|
||||
this.createGem(4, 6);
|
||||
this.createGem(5, 6);
|
||||
//
|
||||
this.createGem(44, 12);
|
||||
this.createGem(42, 13);
|
||||
this.createGem(42, 16);
|
||||
|
||||
// create enemies
|
||||
|
||||
this.createFrog(15, 9);
|
||||
this.createFrog(30, 20);
|
||||
this.createEagle(33, 6);
|
||||
this.createEagle(6, 7);
|
||||
this.createOpossum(42, 9);
|
||||
this.createOpossum(23, 20);
|
||||
|
||||
},
|
||||
|
||||
switchFrogJump: function () {
|
||||
frogJumpSide = (frogJumpSide == 'left') ? 'right' : 'left';
|
||||
},
|
||||
|
||||
createBackgrounds: function () {
|
||||
this.background = game.add.tileSprite(0, 0, gameWidth, gameHeight, 'background');
|
||||
this.middleground = game.add.tileSprite(0, 80, gameWidth, gameHeight, 'middleground');
|
||||
this.background.fixedToCamera = true;
|
||||
this.middleground.fixedToCamera = true;
|
||||
},
|
||||
|
||||
createWorld: function () {
|
||||
// tilemap
|
||||
this.map = game.add.tilemap('map');
|
||||
this.map.addTilesetImage('tileset');
|
||||
this.layer = this.map.createLayer('Tile Layer 1');
|
||||
this.layer.resizeWorld();
|
||||
// which tiles collide
|
||||
this.map.setCollision([27, 29, 31, 33, 35, 37, 77, 81, 86, 87, 127, 129, 131, 133, 134, 135, 83, 84, 502, 504, 505, 529, 530, 333, 335, 337, 339, 366, 368, 262, 191, 193, 195, 241, 245, 291, 293, 295,]);
|
||||
// set some tiles one way collision
|
||||
this.setTopCollisionTiles(35);
|
||||
this.setTopCollisionTiles(36);
|
||||
this.setTopCollisionTiles(84);
|
||||
this.setTopCollisionTiles(86);
|
||||
this.setTopCollisionTiles(134);
|
||||
this.setTopCollisionTiles(135);
|
||||
this.setTopCollisionTiles(366);
|
||||
this.setTopCollisionTiles(367);
|
||||
this.setTopCollisionTiles(368);
|
||||
this.setTopCollisionTiles(262);
|
||||
},
|
||||
|
||||
setTopCollisionTiles: function (tileIndex) {
|
||||
var x, y, tile;
|
||||
for (x = 0; x < this.map.width; x++) {
|
||||
for (y = 1; y < this.map.height; y++) {
|
||||
tile = this.map.getTile(x, y);
|
||||
if (tile !== null) {
|
||||
if (tile.index == tileIndex) {
|
||||
tile.setCollision(false, false, true, false);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
createPlayer: function (x, y) {
|
||||
x *= 16;
|
||||
y *= 16;
|
||||
this.player = game.add.sprite(x, y, 'atlas', 'player/idle/player-idle-1');
|
||||
this.player.anchor.setTo(0.5);
|
||||
game.physics.arcade.enable(this.player);
|
||||
this.player.body.gravity.y = 500;
|
||||
this.player.body.setSize(12, 16, 8, 16);
|
||||
//add animations
|
||||
var animVel = 15;
|
||||
this.player.animations.add('idle', Phaser.Animation.generateFrameNames('player/idle/player-idle-', 1, 4, '', 0), animVel - 3, true);
|
||||
this.player.animations.add('run', Phaser.Animation.generateFrameNames('player/run/player-run-', 1, 6, '', 0), animVel, true);
|
||||
this.player.animations.add('jump', ['player/jump/player-jump-1'], 1, false);
|
||||
this.player.animations.add('fall', ['player/jump/player-jump-2'], 1, false);
|
||||
this.player.animations.add('crouch', Phaser.Animation.generateFrameNames('player/crouch/player-crouch-', 1, 2, '', 0), 10, true);
|
||||
this.player.animations.add('hurt', Phaser.Animation.generateFrameNames('player/hurt/player-hurt-', 1, 2, '', 0), animVel, true);
|
||||
this.player.animations.play('idle');
|
||||
// timer
|
||||
hurtTimer = game.time.create(false);
|
||||
hurtTimer.loop(500, this.resetHurt, this);
|
||||
},
|
||||
createEnemyDeath: function (x, y) {
|
||||
this.enemyDeath = game.add.sprite(x, y, 'atlas');
|
||||
this.enemyDeath.anchor.setTo(0.5);
|
||||
this.animDeath = this.enemyDeath.animations.add('dead', Phaser.Animation.generateFrameNames('enemy-death/enemy-death-', 1, 6, '', 0), 16, false);
|
||||
this.enemyDeath.animations.play('dead');
|
||||
this.animDeath.onComplete.add(function () {
|
||||
this.enemyDeath.kill();
|
||||
}, this);
|
||||
},
|
||||
|
||||
createItemFeedback: function (x, y) {
|
||||
var itemFeedback = game.add.sprite(x, y, 'atlas');
|
||||
itemFeedback.anchor.setTo(0.5);
|
||||
var animFeedback = itemFeedback.animations.add('feedback', Phaser.Animation.generateFrameNames('item-feedback/item-feedback-', 1, 4, '', 0), 16, false);
|
||||
itemFeedback.animations.play('feedback');
|
||||
animFeedback.onComplete.add(function () {
|
||||
itemFeedback.kill();
|
||||
}, this);
|
||||
},
|
||||
|
||||
resetHurt: function () {
|
||||
hurtFlag = false;
|
||||
},
|
||||
|
||||
createOpossum: function (x, y) {
|
||||
x *= 16;
|
||||
y *= 16;
|
||||
var temp = game.add.sprite(x, y, 'atlas', 'opossum/opossum-1');
|
||||
temp.anchor.setTo(0.5);
|
||||
game.physics.arcade.enable(temp);
|
||||
temp.body.gravity.y = 500;
|
||||
temp.body.setSize(16, 13, 8, 15);
|
||||
//add animations
|
||||
temp.animations.add('run', Phaser.Animation.generateFrameNames('opossum/opossum-', 1, 6, '', 0), 12, true);
|
||||
temp.animations.play('run');
|
||||
temp.body.velocity.x = 60 * game.rnd.pick([1, -1]);
|
||||
temp.body.bounce.x = 1;
|
||||
temp.enemyType = 'opossum';
|
||||
|
||||
this.enemies.add(temp);
|
||||
},
|
||||
|
||||
createEagle: function (x, y) {
|
||||
x *= 16;
|
||||
y *= 16;
|
||||
var temp = game.add.sprite(x, y, 'atlas', 'eagle/eagle-attack-1');
|
||||
temp.anchor.setTo(0.5);
|
||||
game.physics.arcade.enable(temp);
|
||||
temp.body.setSize(16, 13, 8, 20);
|
||||
//add animations
|
||||
temp.animations.add('attack', Phaser.Animation.generateFrameNames('eagle/eagle-attack-', 1, 4, '', 0), 12, true);
|
||||
temp.animations.play('attack');
|
||||
// tweens
|
||||
var VTween = game.add.tween(temp).to({
|
||||
y: y + 50
|
||||
}, 1000, Phaser.Easing.Linear.None, true, 0, -1);
|
||||
VTween.yoyo(true);
|
||||
temp.enemyType = 'eagle';
|
||||
|
||||
this.enemies.add(temp);
|
||||
},
|
||||
|
||||
createFrog: function (x, y) {
|
||||
x *= 16;
|
||||
y *= 16;
|
||||
var temp = game.add.sprite(x, y, 'atlas', 'frog/idle/frog-idle-1');
|
||||
temp.anchor.setTo(0.5);
|
||||
game.physics.arcade.enable(temp);
|
||||
temp.body.gravity.y = 500;
|
||||
temp.body.setSize(16, 16, 8, 11);
|
||||
//add animations
|
||||
temp.animations.add('idle', Phaser.Animation.generateFrameNames('frog/idle/frog-idle-', 1, 4, '', 0), 6, true);
|
||||
temp.animations.add('jump', ['frog/jump/frog-jump-1'], 6, false);
|
||||
temp.animations.add('fall', ['frog/jump/frog-jump-2'], 6, false);
|
||||
temp.animations.play('idle');
|
||||
temp.enemyType = 'frog';
|
||||
temp.side = 'right';
|
||||
|
||||
this.enemies.add(temp);
|
||||
},
|
||||
|
||||
createCherry: function (x, y) {
|
||||
x *= 16;
|
||||
y *= 16;
|
||||
var temp = game.add.sprite(x, y, 'atlas', 'cherry/cherry-1');
|
||||
temp.anchor.setTo(0.5);
|
||||
game.physics.arcade.enable(temp);
|
||||
//add animations
|
||||
temp.animations.add('idle', Phaser.Animation.generateFrameNames('cherry/cherry-', 1, 7, '', 0), 12, true);
|
||||
temp.animations.play('idle');
|
||||
|
||||
this.items.add(temp);
|
||||
},
|
||||
|
||||
createGem: function (x, y) {
|
||||
x *= 16;
|
||||
y *= 16;
|
||||
var temp = game.add.sprite(x, y, 'atlas', 'gem/gem-1');
|
||||
temp.anchor.setTo(0.5);
|
||||
game.physics.arcade.enable(temp);
|
||||
//add animations
|
||||
temp.animations.add('idle', Phaser.Animation.generateFrameNames('gem/gem-', 1, 5, '', 0), 12, true);
|
||||
temp.animations.play('idle');
|
||||
|
||||
this.items.add(temp);
|
||||
},
|
||||
|
||||
update: function () {
|
||||
//this.debugGame();
|
||||
game.physics.arcade.collide(this.player, this.layer);
|
||||
game.physics.arcade.collide(this.enemies, this.layer);
|
||||
game.physics.arcade.overlap(this.player, this.enemies, this.checkAgainstEnemies, null, this);
|
||||
game.physics.arcade.overlap(this.player, this.items, this.pickItem, null, this);
|
||||
this.movePlayer();
|
||||
this.enemiesManager();
|
||||
this.parallaxBackground();
|
||||
|
||||
},
|
||||
|
||||
pickItem: function (player, item) {
|
||||
this.createItemFeedback(item.x, item.y);
|
||||
item.kill();
|
||||
},
|
||||
|
||||
enemiesManager: function () {
|
||||
for (var i = 0, len = this.enemies.children.length; i < len; i++) {
|
||||
|
||||
var tempEnemy = this.enemies.children[i];
|
||||
|
||||
// opossum
|
||||
if (tempEnemy.enemyType == 'opossum') {
|
||||
if (tempEnemy.body.velocity.x < 0) {
|
||||
tempEnemy.scale.x = 1;
|
||||
} else {
|
||||
tempEnemy.scale.x = -1;
|
||||
}
|
||||
}
|
||||
|
||||
// eagle
|
||||
if (tempEnemy.enemyType == 'eagle') {
|
||||
if (tempEnemy.x > this.player.x) {
|
||||
tempEnemy.scale.x = 1;
|
||||
} else {
|
||||
tempEnemy.scale.x = -1;
|
||||
}
|
||||
}
|
||||
|
||||
// frog
|
||||
if (tempEnemy.enemyType == 'frog') {
|
||||
if (tempEnemy.side == 'left' && frogJumpSide == 'right') {
|
||||
tempEnemy.scale.x = 1;
|
||||
tempEnemy.side = 'right';
|
||||
tempEnemy.body.velocity.y = -200;
|
||||
tempEnemy.body.velocity.x = -100;
|
||||
} else if (tempEnemy.side == 'right' && frogJumpSide == 'left') {
|
||||
tempEnemy.scale.x = -1;
|
||||
tempEnemy.side = 'left';
|
||||
tempEnemy.body.velocity.y = -200;
|
||||
tempEnemy.body.velocity.x = 100;
|
||||
} else if (tempEnemy.body.onFloor()) {
|
||||
tempEnemy.body.velocity.x = 0;
|
||||
}
|
||||
// animations
|
||||
if (tempEnemy.body.velocity.y < 0) {
|
||||
tempEnemy.animations.play('jump');
|
||||
} else if (tempEnemy.body.velocity.y > 0) {
|
||||
tempEnemy.animations.play('fall');
|
||||
} else {
|
||||
tempEnemy.animations.play('idle');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
checkAgainstEnemies: function (player, enemy) {
|
||||
|
||||
if ((player.y + player.body.height * .5 < enemy.y ) && player.body.velocity.y > 0) {
|
||||
|
||||
this.createEnemyDeath(enemy.x, enemy.y);
|
||||
enemy.kill();
|
||||
player.body.velocity.y = -200;
|
||||
} else {
|
||||
this.hurtPlayer();
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
hurtPlayer: function () {
|
||||
if (hurtFlag) {
|
||||
return;
|
||||
}
|
||||
hurtFlag = true;
|
||||
hurtTimer.start();
|
||||
this.player.body.velocity.y = -100;
|
||||
|
||||
this.player.body.velocity.x = (this.player.scale.x == 1) ? -100 : 100;
|
||||
},
|
||||
parallaxBackground: function () {
|
||||
this.background.tilePosition.x = this.layer.x * -0.1;
|
||||
this.middleground.tilePosition.x = this.layer.x * -0.5;
|
||||
},
|
||||
debugGame: function () {
|
||||
//game.debug.spriteInfo(this.player, 30, 30);
|
||||
//game.debug.body(this.enemies);
|
||||
game.debug.body(this.player);
|
||||
|
||||
this.enemies.forEachAlive(this.renderGroup, this);
|
||||
this.items.forEachAlive(this.renderGroup, this);
|
||||
|
||||
},
|
||||
renderGroup: function (member) {
|
||||
game.debug.body(member);
|
||||
},
|
||||
|
||||
movePlayer: function () {
|
||||
|
||||
if (hurtFlag) {
|
||||
this.player.animations.play('hurt');
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.wasd.jump.isDown && this.player.body.onFloor()) {
|
||||
this.player.body.velocity.y = -170;
|
||||
}
|
||||
|
||||
var vel = 150;
|
||||
if (this.wasd.left.isDown) {
|
||||
this.player.body.velocity.x = -vel;
|
||||
this.player.animations.play('run');
|
||||
this.player.scale.x = -1;
|
||||
} else if (this.wasd.right.isDown) {
|
||||
this.player.body.velocity.x = vel;
|
||||
this.player.animations.play('run');
|
||||
this.player.scale.x = 1;
|
||||
} else {
|
||||
this.player.body.velocity.x = 0;
|
||||
if (this.wasd.crouch.isDown) {
|
||||
this.player.animations.play('crouch');
|
||||
} else {
|
||||
this.player.animations.play('idle');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// jump animation
|
||||
if (this.player.body.velocity.y < 0) {
|
||||
this.player.animations.play('jump');
|
||||
} else if (this.player.body.velocity.y > 0) {
|
||||
this.player.animations.play('fall');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user