ebiten에서 스마트 폰의 멀티 터치 좌표를 표시해 보았습니다.
ebiten에서 멀티 터치
ebiten 을 사용하여 제작중인 게임을 스마트 폰 앱으로도 작동하도록 노력하고 있습니다. 그래서 터치 조작을 다루는 방법을 배우기 위해 "멀티 터치 좌표를 화면에 표시하는 샘플"을 만들어 스마트 폰으로 움직여 보았습니다.
샘플 코드는 다음 리포지토리에 있습니다.
kemokemo/ebiten-sketchbook:
Sketchbook to do various trials using the ebiten library - touch-point
사용환경
구현 내용 설명
터치 위치 정보를 가져오기
사용 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.gofunc 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 부품의 근처 판정을 실장하면, 화면 조작을 할 수 있을 것 같네요!
점점 근육 트레이닝하려고합니다!
Reference
이 문제에 관하여(ebiten에서 스마트 폰의 멀티 터치 좌표를 표시해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/KemoKemo/items/31a29de33b2340bd96d6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// 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 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
}
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
}
Reference
이 문제에 관하여(ebiten에서 스마트 폰의 멀티 터치 좌표를 표시해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KemoKemo/items/31a29de33b2340bd96d6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)