updated_at: 2024-12-15 04:01

파이썬 기본구조

기본 구조

export class MyScene extends Phaser.Scene {
    private game: any;
    private config = {
        type: Phaser.AUTO,
        width: 800,
        height: 600,
        scene: {
            preload: preload,
            create: create,
            update: update
        }
    };

    constructor() {
        this.game = new Phaser.Game(this.config);
    }

    public init() {
    }

    public preload()  {
    }

    public create()  {
    }

    override update()  {
    }

}

coinfig.scene 에 정의된 함수되로 차례로 실행된다.

그러나 위의 방식은 angular에서는 문제점이 발생한다. preload나 create 등의 안에서 this를 호출하면 MyScene 이 아니라 Phaser.Scene가 this가 된다. 따라서 angular에서는 아래의 방법(Scene manager)으로 수정하는 것이 옳은 것 같다. 또한 이 방법이 추후 복잡한 게임으로 전개시 확장성이 더 있다. game.scene.add 에 세번째 인자값을 true로 추가하면 scene 에 추가시 바로 preload, create, update가 실행된다.

export class BasicGameComponent1 {
    // public game: any;

    private config = {
        type: Phaser.AUTO,
        width: 800,
        height: 600
    }


    constructor() {
        const game = new Phaser.Game(this.config);
        game.scene.add('main', new MyScene(), true);
    }
}
export class MyScene extends Phaser.Scene {
    constructor() {
        super({});
    }

this.game.scene.start('game',{ pieces: 3, image: 3 }) 처럼 파라미터를 start에 넘길 경우 init 에서 변수값을 받아서 처리한다.

    init(data) {

    }

load할 asset을 이곳에 정의한다.

    private preload ()
    {

    }

load 된 asset에 속성값을 부여한다.(play를 한다거나 position 을 정한다.)

    private create ()
    {
    }

속성이 정해진 asset을 화면에 노출한다.

    override update ()
    {
    }

update는 time과 delta라는 두가지 전달값을 받을 수도 있다. time: 총플레이 시간 delta : 이전 시간과 현재 시간과의 차이

override update (time: number, delta: number)
{
    console.log('update: ', time, delta);
}

config 에 scene이 정의되지 않음 경우

private config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600
}


constructor() {
    const game = new Phaser.Game(this.config);
    game.scene.add('main', new MyScene(), true);
}

config 에 scene를 정의하는 경우

private config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600,
    scene: [
        MyScene
    ]
}


constructor() {
    const game = new Phaser.Game(this.config);
}

config 에 scene 이 여러개 정의된 경우

private config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600,
    scene: [
        MyScene1,
        MyScene2
    ]
}


constructor() {
    const game = new Phaser.Game(this.config);
}

위와 같은 겨우 MyScene1 이 자동로드되고 이후 프로그램에서 this.scene.start('game', { level: 1 }) 처럼 다음 scene의 key를 호출하여야 한다.

SCALE

scale: {
    parent: 'yourgamediv',
    mode: Phaser.Scale.FIT,
    width: 800,
    height: 600
}
scale: {
    parent: 'yourgamediv',
    autoCenter: Phaser.Scale.CENTER_BOTH,
    width: 800,
    height: 600
}
평점을 남겨주세요
평점 : 2.5
총 투표수 : 1

질문 및 답글