@@ -40,10 +40,10 @@ type Canvas struct {
40
40
` NewCanvas ` 函数用于创建并初始化一个` Canvas ` 对象:
41
41
``` wa
42
42
#wa:import wa_js_env newCanvas
43
- fn newCanvas_JS(w, h: u32) => u32
43
+ func newCanvas_JS(w, h: u32) => u32
44
44
45
45
#创建一个宽度为w像素、高度为h像素的画布对象
46
- fn NewCanvas(w, h: u32) => *Canvas {
46
+ func NewCanvas(w, h: u32) => *Canvas {
47
47
var canvas Canvas
48
48
canvas.device_id = newCanvas_JS(w, h)
49
49
canvas.width = w
@@ -61,22 +61,22 @@ fn NewCanvas(w, h: u32) => *Canvas {
61
61
62
62
``` wa
63
63
#获取画布对象坐标为(x, y)处的像素颜色值
64
- fn Canvas.GetPixel(x, y: u32) => u32 {
64
+ func Canvas.GetPixel(x, y: u32) => u32 {
65
65
return this.frame_buf[y * this.width + x]
66
66
}
67
67
68
68
#设置画布对象坐标(x, y)处的颜色值为color
69
- fn Canvas.SetPixel(x, y, color: u32) {
69
+ func Canvas.SetPixel(x, y, color: u32) {
70
70
this.frame_buf[y * this.width + x] = color
71
71
}
72
72
```
73
73
74
74
当整个帧缓存填充完毕后,通过` Canvas.Flush ` 方法将帧缓存数据更新至页面中的画布对象;与创建画布DOM对象类似,该操作也需要通过JS环境导入的函数完成:
75
75
``` wa
76
76
#wa:import wa_js_env updateCanvas
77
- fn updateCanvas_JS(id: u32, buf: *u32)
77
+ func updateCanvas_JS(id: u32, buf: *u32)
78
78
79
- fn Canvas.Flush() {
79
+ func Canvas.Flush() {
80
80
updateCanvas_JS(this.device_id, &this.frame_buf[0])
81
81
}
82
82
```
@@ -85,8 +85,8 @@ fn Canvas.Flush() {
85
85
86
86
``` wa
87
87
#画布事件回调函数原型
88
- type OnTouch fn (x, y: u32)
89
- type OnKey fn (key: u32)
88
+ type OnTouch func (x, y: u32)
89
+ type OnKey func (key: u32)
90
90
91
91
#画布事件
92
92
type CanvasEvents struct {
@@ -103,7 +103,7 @@ var canvas_events: []CanvasEvents
103
103
一个` CanvasEvents ` 对应某个` Canvas ` 的一组交互事件回调函数,其对应关系由` CanvasEvents.Device_id ` 和` Canvas.device_id ` 确定。canvas包的包级变量` canvas_events ` 是一个动态数组,凹语言侧代码可以通过` AttachCanvasEvents ` 函数将一个事件对象附加到事件对象数组中:
104
104
105
105
``` wa
106
- fn AttachCanvasEvents(e: CanvasEvents) {
106
+ func AttachCanvasEvents(e: CanvasEvents) {
107
107
for i := range canvas_events {
108
108
if canvas_events[i].Device_id == e.Device_id {
109
109
canvas_events[i] = e
@@ -123,7 +123,7 @@ fn AttachCanvasEvents(e: CanvasEvents) {
123
123
id为画布DOM对象对应的Canvas对象id
124
124
(x, y)为画布像素坐标系坐标
125
125
*/
126
- fn OnMouseDown(id: u32, x, y:u32) {
126
+ func OnMouseDown(id: u32, x, y:u32) {
127
127
for _, i := range canvas_events {
128
128
if i.Device_id == id {
129
129
i.OnMouseDown(x, y)
@@ -150,7 +150,7 @@ type GameState struct {
150
150
151
151
var gameState: GameState
152
152
153
- fn GameState.Init(w, h: i32, scale: i32) {
153
+ func GameState.Init(w, h: i32, scale: i32) {
154
154
this.w = w
155
155
this.h = h
156
156
this.scale = scale
@@ -159,9 +159,9 @@ fn GameState.Init(w, h: i32, scale: i32) {
159
159
160
160
var caev: canvas.CanvasEvents
161
161
caev.Device_id = this.ca.GetDeviceID()
162
- caev.OnMouseDown = fn (x, y: u32) {}
163
- caev.OnMouseUp = fn (x, y: u32) {}
164
- caev.OnKeyUp = fn (key: u32) {}
162
+ caev.OnMouseDown = func (x, y: u32) {}
163
+ caev.OnMouseUp = func (x, y: u32) {}
164
+ caev.OnKeyUp = func (key: u32) {}
165
165
caev.OnKeyDown = this.OnKeyDown
166
166
167
167
Dirs[DirNull] = Position{x: 0, y: 0}
@@ -179,7 +179,7 @@ fn GameState.Init(w, h: i32, scale: i32) {
179
179
游戏的处理流程很简单:
180
180
181
181
``` wa
182
- fn GameState.Step() {
182
+ func GameState.Step() {
183
183
if this.dir == DirNull {
184
184
return
185
185
}
@@ -219,11 +219,11 @@ fn GameState.Step() {
219
219
this.ca.Flush()
220
220
}
221
221
222
- fn Step() {
222
+ func Step() {
223
223
gameState.Step()
224
224
}
225
225
226
- fn main() {
226
+ func main() {
227
227
gameState.Init(32, 32, 10)
228
228
gameState.Start()
229
229
}
0 commit comments