ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL_200910(PixiJS-Container)
    Today I Learned 2020. 9. 10. 19:22

     

    잘린 타일을 여러 개 이어붙여서 배경을 만들어 봅시다.

     

    const app = new PIXI.Application({
      width: 480,
      height: 320,
    });
    
    const tileSize = 16;
    
    // map을 선언합니다
    let map = {
      width: 4,
      height: 4,
      tiles: [
        0, 0, 0, 0,
        0, 0, 0, 0,
        0, 0, 0, 0,
        0, 0, 0, 0,
      ],
    };
    
    document.body.appendChild(app.view);
    
    app.loader.add("tileset", "asset.png").load((loader, resources) => {
      let tileTextures = [];
      for (let i = 0; i < 7 * 11; i++) {
        let x = i % 7;
        let y = Math.floor(i / 7);
        tileTextures[i] = new PIXI.Texture(
          resources.tileset.texture,
          new PIXI.Rectangle(x * tileSize, y * tileSize, tileSize, tileSize)
        );
      }
      
      // 컨테이너 생성
      let background = new PIXI.Container();
      
      for (let y = 0; y < map.width; y++);
      	for (let x = 0; x < map.width; x++);
          let tile = map.tiles[y * map.width + y];
          // sprite 생성
          let sprite = new PIXI.Sprite(tileTextures[tile]);
          // sprite 위치설정
          sprite.x = x * tileSize;
          sprite.y = y * tileSize;
          // 컨테이너에 sprite 추가
          background.addChild(sprite);
        }
      }
      
      // 크기설정
      background.scale.x = 4;
      background.scale.y = 4;
      app.stage.addChild(background)
    }

     

    이어붙이고 크기를 크게 했더니

    화면이 깨지네요?

     

    한 줄의 코드를 추가하면 됩니다.

    PIXI.settings.SCALE_MODE = PIXI.SCALE_MODES.NEAREST;
    // 위의 한 줄을 가장 윗줄에 추가합니다.
    
    const app = new PIXI.Application({	// 작성된 코드들
    
    ...

     

    깔끔하게 보입니다

     

     

    판을 키워봅시다!

    map 객체의 값을 변경하고

     

    let map = {
      width: 16,
      height: 10,
      tiles: [
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      ]
    };

     

    타일 크기를 조절합니다.

     

    background.scale.x = 2;
    background.scale.y = 2;
    app.stage.addChild(background);

     

    화면이 만들어 졌습니다

     

     

    값을 조금 바꾸어 본다면

     

    let map = {
      width: 16,
      height: 10,
      tiles: [
        74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,
        74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,
        74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,
        74,74,74,23,74,74,74,74,74,74,74,74,74,74,74,74,
        74,74,74,30,74,74,3, 4, 4, 5, 74,74,74,74,74,74,
        74,74,74,30,74,74,74,74,74,74,74,74,74,74,74,74,
        74,74,74,30,74,74,74,74,74,74,74,74,74,74,74,74,
        74,74,74,37,74,74,74,74,74,74,74,74,74,74,74,74,
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
      ],
    };

     

    원하는 배경을 만들 수 있죠.

     

    그런데 타일처럼 화면을 만들어서 검정색으로 빈공간이 보입니다.

    그러므로 하늘을 그리는 container를 생성하여 추가합니다.

    let sky = 
      new PIXI.TilingSprite (
        tileTextures[74], 
        map.width * tileSize, 
        map.height * tileSize
      );
      
    app.stage.addChild(sky);

     

    stage.addChild는 레이어 개념인 것 같습니다.

    나중에 추가되는 것이 앞에 그려지네요

     

    // 왼쪽
    app.stage.addChild(sky);
    app.stage.addChild(background);
    
    // 오른쪽
    app.stage.addChild(background);
    app.stage.addChild(sky);

     

    크기를 재설정하여 화면을 채웁니다.

     

    sky.scale.x = sky.scale.y = 2;

     

     

     

     

     

     

     

     

     

     

     

     

     

    'Today I Learned' 카테고리의 다른 글

    TIL_200912([JS33] 2. Primitive Types)  (0) 2020.09.12
    TIL_200911(PixiJS-character)  (0) 2020.09.11
    TIL_200909(PixiJS-tileTexture)  (0) 2020.09.10
    TIL_200907(PixiJS - sprite)  (0) 2020.09.07
    TIL_200906(React Hook 공식문서)  (0) 2020.09.06

    댓글

Designed by CHANUL