山东大学软件实验课程-Ebiten-基于go语言实现的2D游戏库源码分析第七篇-关于Ebiten游戏库触摸等功能函数的分析 2021SC@SDUSC

山东大学软件实验课程-Ebiten-基于go语言实现的2D游戏库源码分析第七篇-关于Ebiten游戏库触摸等功能函数的分析 2021SC@SDUSC,第1张

2021SC@SDUSC

目录

一、AppendJustPressedTouchIDs()函数

二、IsTouchJustReleased()函数

三、TouchPressDuration()函数

四、总结


一、AppendJustPressedTouchIDs()函数

代码如下:

func AppendJustPressedTouchIDs(touchIDs []ebiten.TouchID) []ebiten.TouchID {
	origLen := len(touchIDs)
	theInputState.m.RLock()
	for id, s := range theInputState.touchDurations {
		if s == 1 {
			touchIDs = append(touchIDs, id)
		}
	}
	theInputState.m.RUnlock()
	s := touchIDs[origLen:]
	sort.Slice(s, func(a, b int) bool {
		return s[a] < s[b]
	})
	return touchIDs
}

在当前帧中创建的触摸id附加到触摸id中,并返回扩展的缓冲区。给予一个已经有足够容量的有效工作部分。

该动作是是并发且安全的。

二、IsTouchJustReleased()函数

代码如下:

func IsTouchJustReleased(id ebiten.TouchID) bool {
	theInputState.m.RLock()
	r := theInputState.touchDurations[id] == 0 && theInputState.prevTouchDurations[id] > 0
	theInputState.m.RUnlock()
	return r
}

该函数的作用是给出一个布尔值,判断该触摸动作是否在有效帧内释放。

三、TouchPressDuration()函数

代码如下:

func TouchPressDuration(id ebiten.TouchID) int {
	theInputState.m.RLock()
	s := theInputState.touchDurations[id]
	theInputState.m.RUnlock()
	return s
}

该函数的返回值不再是布尔值,而是int类型,它判断了该触摸动作持续的有效帧。

四、总结

对于inpututil包内代码的分析基本到这里结束了,所以该篇分析内容较少。

纵观整个inpututil.go文件,其主要作用就是定义了很多函数,用来反馈鼠标。键盘。游戏手柄以及触摸的输入、释放及持续时间,是整个Ebiten游戏库中很重要的部分。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/996138.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存