ebiten으로 필드 생성

7798 단어 Go
저번의 후속.
유저가 이동할 필드를 하드코딩하였지만, 더욱 효과적으로 생성할 수 있습니다.

생성 필드


문자열에서 필드를 간단하게 생성합니다.참조goo-inovation 방법.

소스 코드


  • 전체 차이는 다음과 같다.
  • https://github.com/zenwerk/go-pixelman3/commit/9c550a3b11d06b02513bdca9fa8ae23486d961e0
  • field/field_data.go
  • package field
    
    const Field_data_1 = `+                                        +
    +                                        +
    +                                        +
    +               ++++++++++++++           +
    +        +                               +
    +          + ++                          +
    +      +                     +  +++++    +
    +       +                 +              +
    +           +++++++++                    +
    +      +++              +                +
    +                                        +
    +   ++                                   +
    +           P                            +
    ++++++++++++++++++++++++++++++++++++++++++
    `
    
  • field/field.go
  • package field
    
    import (
        "strings"
    
        "github.com/hajimehoshi/ebiten"
    
        "github.com/zenwerk/go-pixelman3/sprite"
    )
    
    const (
        width  = 17
        height = 17
    
        blockMark  = "+"
        playerMark = "P"
    )
    
    type Field struct {
        Player  *sprite.Player
        Sprites []sprite.Sprite
    }
    
    func NewField(fieldData string) *Field {
        field := new(Field)
    
        for indexY, line := range strings.Split(fieldData, "\n") {
            for indexX, str := range line {
                switch string(str) {
                case blockMark:
                    block := sprite.NewBlock()
                    block.Position.X = indexX * width
                    block.Position.Y = indexY * height
                    field.Sprites = append(field.Sprites, block)
                case playerMark:
                    player := sprite.NewPlayer()
                    player.Position.X = indexX * width
                    player.Position.Y = indexY * height
                    field.Player = player
                }
            }
        }
    
        return field
    }
    
    func (f *Field) DrawImage(screen *ebiten.Image, viewport sprite.Position) {
        for _, sprite := range f.Sprites {
            sprite.DrawImage(screen, viewport)
        }
    }
    
    field_data.go에 정의된 문자열은 필드의 생성원입니다.field.goNewField에서 문자열을 순환하여 특정 문자가 나타날 때 해당하는 Sprite를 생성합니다.

    실행 결과



    총결산


    수동으로 좌표를 지정하는 것보다 훨씬 수월하다.

    좋은 웹페이지 즐겨찾기