ebiten에서 스마트 폰의 멀티 터치 좌표를 표시해 보았습니다.

ebiten에서 멀티 터치





ebiten 을 사용하여 제작중인 게임을 스마트 폰 앱으로도 작동하도록 노력하고 있습니다. 그래서 터치 조작을 다루는 방법을 배우기 위해 "멀티 터치 좌표를 화면에 표시하는 샘플"을 만들어 스마트 폰으로 움직여 보았습니다.

샘플 코드는 다음 리포지토리에 있습니다.

kemokemo/ebiten-sketchbook:
Sketchbook to do various trials using the ebiten library - touch-point

사용환경


  • go version go1.10.2 windows/amd64
  • ebiten rev. c39c211d1fe0744b3a2315a122f89c7074a54a49
  • gomobile version +bf2d30a Sun Apr 29 17:04:17 2018
  • Android NDK r16b

  • 구현 내용 설명



    터치 위치 정보를 가져오기



    사용 ebiten 측의 메소드를 순서대로 봅시다.
    먼저 TouchIDs 메서드에서 ID의 배열을 가져옵니다.

    input.go
    // TouchIDs returns the current touch states.
    //
    // TouchIDs returns nil when there are no touches.
    // TouchIDs always returns nil on desktops.
    //
    // TouchIDs is concurrent-safe.
    func TouchIDs() []int {
        var ids []int
        for _, t := range ui.AdjustedTouches() {
            ids = append(ids, t.ID())
        }
        return ids
    }
    

    다음에 TouchPosition 에 앞서 취득한 ID 를 건네주어, (x,y) 의 위치 정보를 취득합니다.

    input.go
    // TouchPosition returns the position for the touch of the specified ID.
    //
    // If the touch of the specified ID is not present, TouchPosition returns (0, 0).
    //
    // TouchPosition is cuncurrent-safe.
    func TouchPosition(id int) (int, int) {
        for _, t := range ui.AdjustedTouches() {
            if t.ID() == id {
                return t.Position()
            }
        }
        return 0, 0
    }
    

    표시해보기



    그래서, 실제로 위치 정보를 취득해 화면에 표시해 본 것이 이하의 구현입니다.
    취득한 []int型IDs 를 소트하고 나서 사용합니다. ID 는 작은 숫자에서 터치한 순서로 되어 있습니다.

    main.go
    func update(screen *ebiten.Image) error {
        message := "touching points:\n"
        IDs := ebiten.TouchIDs()
        sort.Slice(IDs, func(i, j int) bool {
            return IDs[i] < IDs[j]
        })
        for _, id := range IDs {
            x, y := ebiten.TouchPosition(id)
            message = fmt.Sprintf("%v x: %v, y: %v\n", message, x, y)
        }
        ebitenutil.DebugPrint(screen, message)
        return nil
    }
    

    다음은 터치 위치 정보와 UI 부품의 근처 판정을 실장하면, 화면 조작을 할 수 있을 것 같네요!
    점점 근육 트레이닝하려고합니다!

    좋은 웹페이지 즐겨찾기