From f1689ba839ca8b38b1f372578aa19b79bd20f057 Mon Sep 17 00:00:00 2001 From: KGrzeg Date: Wed, 13 Oct 2021 18:46:21 +0200 Subject: [PATCH] Add ship --- public/assets/img/ship.png | Bin 0 -> 1607 bytes src/classes/Ship.ts | 48 +++++++++++++++++++++++++++++++++++++ src/main.ts | 4 +++- src/scenes/DefaultScene.ts | 8 ++++++- 4 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 public/assets/img/ship.png create mode 100644 src/classes/Ship.ts diff --git a/public/assets/img/ship.png b/public/assets/img/ship.png new file mode 100644 index 0000000000000000000000000000000000000000..b43a2e4942ed8410c887ea6fc32cfaee71513b4f GIT binary patch literal 1607 zcmeAS@N?(olHy`uVBq!ia0y~yU{GdYU{K;}peR2r zGbfdSL1SX=L|c!;4l+mMFLwn+$-Gf`G-07tq=2Yk%#tqG4FR{f)>_So`NirhHAzI= z{ovLI4~{2YJ$N)SoITu8;15G#adA+|M4|uFMWT*W6x``A|1MYlo?&5R>MBVI_K>qi zmpXUMIK94W?|KfU9s#BqQ)jGHH|~zC=v!a?<42YF;Zn zi?XKZKZyym$S(|AU3zVwdVS)G1#44w_!UcV>L_-KxSUwAxJgUrNXAtU!->oO?r5(+ z@p1VH)yb=w-1=CrEO09N^Pv92?&!@HmJiihA32=w&aLlZ*t^?db>i*&$G6?JV*GRd zz|?CWug^MgM*U@PpO`JvukDT9ulv;AGfuZY@L;l@l`%FPd3g8=CR8^uFfd4#xJHyX z=jZ08=9Mrw7o{eaq^2m8XO?6rxO@5rgg5euGcd5odAc};L>xXE;h3QmF7a>Cv9mgS zn3fLuX`*g!}lM9m$PrK0E)V^#lN1H<9n^gbmNG}C;{?$Ei z9=S$r>-b_2x$u#b^iqSPRtd_XDW_j6{*Jrfvu@UmS^qyh+gtg5{`=bZ_4og48!Xjb zyPNaAU-GuhMh!;EMJfWS3h~?vw3#{csy)}oDlbx*5VzZ{>2{n^v4i*PyrKdj)xBkB zS(aU2H?ev0i>ZvUzh=02Dtt^4h)ZQ&|K<6z@-6cIY>Hk?Gc(V~yp!*LbDqa1)Vek7 zitm~ae`huYeir=_ReL#N{nhqa>(9vbgkAagX5(p-Z*MkcYn3hQnz?pypJvDQJ}Yze zs>3sO3L1Dh$R#AbUcs!YaG%GRyZhY4zo%zCHcE20pW!7UVI8(@%ObwDD}obP7|!*+ zyR+3$*^B9;yG_QwRSN_4l;`nm;t$^%Jo%jlqhxOp2vz$Z{@`vSy!zvjGfyr>)_i>H ze2u@o=0ca%Wzk!Fv%^na`9FWg#jalw&zJiA^{O(SCi$|@!Qo6{BJ1((3=jG%+T_0O zxFLDE=kGeU-B-z_1 z9{+rx@pI~_Q_OY8O#&~)evhgx+x^1EH2xre{A!*HOJB=G1?jEb%^4qe$uLmJqu{nT zpWh;vDJ*8+7VUCxx*cbh7JK~n+z!dt7cV?l*MH1>GxBWshVLdk3_m{l^0fax&V2LF z$ese%bUW&K5oKcLn>y3H>kKES@-P1sYt{G*QoVm5obHevtOj()(=q1TT>r z&#u(4KAe!hLgLmMhqC0^0iQ*mSxnV%;5>0+>1OB6#=WZho;1@3{)z@7#gO8uGH9uEpb|I_m;*QNNPff+^s{V@Y-so%6!}ibS_wQ=y`TiNl z?naujDb2kuwK_8UVd3ktFy3!#5C2VmbIk1QqUql0zN#sIE(eQQ|Lb6nOFb-d#Dwva zlA0IOLe43(!f!U%f0{qP;6(d=SnU}s-jvV%@#J8074ZU zYmzeOI{*E6$m6f?6uve4YcuxWuRMS3NBX_Cvp;9--`M%-&Wm$XjY@-fW1q}OTWcGh z_4VYTMZ(9?vXWA~3 WUl*U{D#XCRz~JfX=d#Wzp$P!K*zlYH literal 0 HcmV?d00001 diff --git a/src/classes/Ship.ts b/src/classes/Ship.ts new file mode 100644 index 0000000..8cbe230 --- /dev/null +++ b/src/classes/Ship.ts @@ -0,0 +1,48 @@ +import Phaser from 'phaser' + +export default class Ship extends Phaser.Physics.Arcade.Sprite { + readonly acceleration = 5 + readonly dragForce = 0.6 + + readonly colliderRadiusRatio = 0.43 + readonly wrapMargin = 10 + + constructor(scene: Phaser.Scene) { + super( + scene, + scene.physics.world.bounds.centerX, + scene.physics.world.bounds.centerY, + 'ship' + ) + + scene.add.existing(this) + scene.physics.add.existing(this) + + scene.input.on('pointermove', (pointer) => { + this.rotation = Phaser.Math.Angle.BetweenPoints(this, pointer) + Math.PI / 2 + }) + + this.setDamping(true) + this.setDrag(this.dragForce) + this.body.setCircle(this.width * this.colliderRadiusRatio) + } + + preUpdate(time, delta) { + super.preUpdate(time, delta) + + const keyUp = this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.W) + const keyDown = this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.S) + const keyLeft = this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.A) + const keyRight = this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.D) + + const vec = new Phaser.Math.Vector2(0, 0) + + if (keyUp.isDown) vec.y = -this.acceleration + if (keyDown.isDown) vec.y = this.acceleration + if (keyRight.isDown) vec.x = this.acceleration + if (keyLeft.isDown) vec.x = -this.acceleration + + this.body.velocity.add(vec) + this.scene.physics.world.wrap(this, this.wrapMargin) + } +} diff --git a/src/main.ts b/src/main.ts index 56f504c..0269360 100644 --- a/src/main.ts +++ b/src/main.ts @@ -4,12 +4,14 @@ import DefaultScene from './scenes/DefaultScene' const config: Phaser.Types.Core.GameConfig = { type: Phaser.AUTO, + width: 800, height: 600, + physics: { default: 'arcade', arcade: { - gravity: { y: 200 } + debug: true } }, scene: [DefaultScene] diff --git a/src/scenes/DefaultScene.ts b/src/scenes/DefaultScene.ts index 2d503d6..76e8ec8 100644 --- a/src/scenes/DefaultScene.ts +++ b/src/scenes/DefaultScene.ts @@ -1,13 +1,17 @@ import Phaser from 'phaser' +import Ship from '../classes/Ship' export default class DefaultScene extends Phaser.Scene { + player?: Ship + constructor() { - super('hello-world') + super('default-scene') } preload() { this.load.image('sky', 'assets/img/nebula10.png') this.load.image('logo', 'assets/img/phaser3-logo.png') + this.load.image('ship', 'assets/img/ship.png') this.load.spritesheet('particles', 'assets/img/boom.png', { frameWidth: 192, frameHeight: 192 }) } @@ -29,5 +33,7 @@ export default class DefaultScene extends Phaser.Scene { logo.setCollideWorldBounds(true) emitter.startFollow(logo) + + this.player = new Ship(this) } }