마지막은 Phaser 3.
24518 단어 phaser3tutorialjavascript
소행성js
소행성의 이동을 처리하기 위해서, 우리는 장면 디렉터리에 소행성이라는 새 파일을 만들 것입니다.js.이 파일은 게임에서 작은 행성의 모든 논리를 처리할 것이다.우선, 우리는 이렇게 파일을 설정할 것이다.
export default class Asteroid extends Phaser.Physics.Arcade.Sprite {
constructor (scene, x, y) {
super(scene, x, y, 'asteroid');
this.speed = Phaser.Math.GetSpeed(100, 1);
this.orbiting = false;
this.direction = 0;
this.factor = 1;
}
}
이것은 소행성 파일의 시작이다.Phaser 3 arcade sprite 클래스를 확장할 새 클래스를 만듭니다.우리는 구조 함수를 정의하고 다른 속성을 추가할 것이며, 이러한 속성은 이후에 작용을 발휘할 것이다.이제 소행성류 중의 다른 방법을 봅시다.launch(shipX, shipY) {
this.orbiting = true;
this.setActive(true);
this.setVisible(true);
let xOrigin = Phaser.Math.RND.between(0, 800);
let yOrigin = 0;
this.setPosition(xOrigin, yOrigin);
if (shipY > xOrigin) {
let m = (shipY - yOrigin) / (shipX - xOrigin);
this.direction = Math.atan(m);
}
else {
this.factor = -1;
let m = (shipY - yOrigin) / (xOrigin - shipX);
this.direction = Math.atan(m);
}
this.angleRotation = Phaser.Math.RND.between(0.2, 0.9);
}
위의 발사 방법은 게임 장면에서 소행성을 발사하는 것을 책임진다.잠시 후 간격으로 실행할 것입니다.발사 기능 중의 많은 논리는 비행선의 현재 위치를 고려하여 새로운 소행성의 여행 벡터를 생성하는 데 달려 있다.이 블로그를 위해서 나는 그 중의 수학 문제를 깊이 토론하지 않을 것이다. 그러나 만약 당신이 어떤 문제가 있으면 나에게 연락하세요.다음은 게임에서 스크린을 통과하는 소행성 업데이트 기능을 살펴보자. update(time, delta) {
this.x += this.factor * Math.cos(this.direction) * this.speed * delta;
this.y += Math.cos(this.direction) * this.speed * delta;
this.angle += this.angleRotation;
if (this.x < -50 || this.y < -50 || this.x > 800 || this.y > 600) {
this.setActive(false);
this.setVisible(false);
this.destroy();
}
}
업데이트 함수를 호출할 때마다 소행성은 자신에게 새로운 x와 y 좌표와 각도를 생성합니다.그런 다음 Phaser 3은 이러한 정보를 사용하여 화면에서 소행성의 새 위치를 계산합니다.다시 한 번, 이 새 좌표들을 계산하는 데는 수학 지식이 필요하지만, 너무 걱정하지 마세요.마지막으로 소행성이 게임 화면의 크기를 초과하면 setActive와 setVisible는false입니다. 이것은 잘못된 것입니다.화면에 나타나지 않기 때문에 소행성을 없애기 위해 Destroy () 가 호출됩니다.게임 장면으로 돌아가다.js
자, 이제 새로운 소행성류가 생겼으니 게임 장면에서 실제로 사용해야 합니다.js 파일.이것이 어떻게 일할 것인지 우리에게 보여 주시오.
// Be sure to import the Asteroid.js file into the play
scene
create() {
// New logic for handling the asteroids
this.asteroidsGroup = this.physics.add.group();
this.asteroidsArray = [];
this.asteroidTimedEvent = this.time.addEvent({
delay: 1000,
callback: this.addAsteroid,
callbackScope: this,
loop: true,
});
}
여기서, 우리는 게임 장면에서 새로운 소행성군을 만들고, 소행성 진열을 만들 것이다.우리는 초당 새로운 소행성을 만드는 새로운 시간evet도 설치했다.이 이벤트의 리셋은 실행 함수입니다.이게 뭔지 보여줘.AddAsterone은 무엇을 하고 있습니까?addAsteroid() {
let asteroid = new Asteroid(this, 0, 0, 'asteroid', 0).setScale(0.02);
this.asteroidsGroup.add(asteroid, true);
this.asteroidsArray.push(asteroid);
}
addasteroid를 호출할 때마다 우리는 새로운 소행성을 만들 것입니다. 이 소행성은 우리의 소행성류에서 생성됩니다.우리는 또 새로운 소행성을 소행성 그룹과 진열에 첨가할 것이다.마지막으로, 우리는 업데이트 함수를 업데이트할 것이다. (내가 거기서 무엇을 했는지 봐라.)이 코드 블록을 업데이트 함수에 추가합니다.for (const asteroid of this.asteroidsArray) {
if (!asteroid.isOrbiting()) {
asteroid.launch(this.ship.x, this.ship.y);
}
asteroid.update(time, delta);
}
이 순환은 소행성 진열을 검사합니다. 만약 어떤 소행성이 궤도를 돌지 않으면 소행성은 게임 장면에 발사되고 업데이트 기능은 실제 소행성처럼 화면에서 이동할 수 있도록 호출됩니다!총을 쏘다.js
자, 이제 우리는 소행성이 스크린에서 이동하는 것을 보았으니, 게이머들을 위해 실제 사격을 하고 파괴하는 방법을 설정하자!이를 위해, 우리는 shoot이라는 새 파일을 만들 것입니다.js.이 문서에서 우리는 비행선이 발사하는 레이저의 모든 논리를 처리할 것이다.간결하게 보기 위해서 나는 전체 촬영 과정을 포함할 것이다.다음은 js입니다.
import Phaser from 'phaser';
export default class Shoot extends Phaser.Physics.Arcade.Sprite {
constructor(scene, x, y) {
super(scene, x, y, 'shoot');
this.speed = Phaser.Math.GetSpeed(500, 1);
}
fire(x, y, direction) {
this.setPosition(x, y);
this.setActive(true);
this.setVisible(true);
this.direction = direction;
this.rotation = this.direction;
}
update(time, delta) {
this.x += Math.cos(this.direction) * this.speed * delta;
this.y += Math.sin(this.direction) * this.speed * delta;
if (this.x < -50 || this.y < -50 || this.x > 800 || this.y > 600) {
this.setActive(false);
this.setVisible(false);
this.destroy();
}
}
}
이제 사격 수업이 생겨서 게임 장면에서 사용해야 한다.js 파일.이제 이 파일에 필요한 변경 사항을 살펴봅시다.우선, 우리는 우리가 생성할 레이저 정령에 새로운 이미지를 추가해야 한다.나는 기본적인 파란색 반점 하나만 사용했지만, PNG 파일 형식이라면 원하는 그림을 사용할 수 있다.이 그림을 먼저 미리 불러오는 함수에 불러옵니다.preload() {
this.load.image('shoot', shoot);
}
다음에, 우리는create 함수를 업데이트하여, 불러오는 새로운 이미지를 새로운 위상기 그룹에 포함하고, 레이저와 소행성에 충돌 처리 프로그램을 설정할 것입니다.this.shootsGroup = this.physics.add.group({
classType: Shoot,
maxSize: 1,
runChildUpdate: true,
});
this.physics.add.overlap(this.shootsGroup, this.asteroidsGroup, this.collision, null, this);
현재create 함수가 업데이트되었습니다. 업데이트 함수에 들어갑니다.스페이스 바로 레이저를 발사할 수 있는 추가 컨트롤러를 추가할 것입니다.if (this.cursors.space.isDown) {
const shoot = this.shootsGroup.get();
if (shoot) {
shoot.fire(this.ship.x, this.ship.y, this.ship.rotation);
}
}
좋습니다. 이제 스페이스 바를 누르면 게임에 새로운 레이저 대상을 만들 것입니다.마지막으로 우리는 두 게임 대상의 충돌을 처리하는 함수를 정의해야 한다.이 함수는 충돌이라고 불릴 것이다.collision(laser, asteroid) {
laser.destroy();
asteroid.destroy();
}
충돌 기능은 두 정령이 서로 충돌할 때 제거합니다.이제 우리는 게임에서 소행성을 파괴하는 데 성공할 수 있다!결론
우리는 이미 Phaser 3에 대한 기본적인 이해에서 소행성을 사살하고 파괴할 수 있는 기능이 완비된 게임으로 바뀌었다.이것은 기본적인 예이지만, 이곳에는 확장할 수 있는 곳이 매우 많다.Phaser 3 문서를 더 많이 읽으면 유용한 정보가 많아서 더 강한 상호작용 게임을 만들 수 있습니다!나는 너희들이 이 시리즈를 좋아하길 바란다. 나는 곧 돌아와서 더 많은 Phaser 3 강좌를 볼 것이다.
Reference
이 문제에 관하여(마지막은 Phaser 3.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cschratz/finishing-up-with-phaser-3-1b39텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)