Skip to content

Commit 1909203

Browse files
committed
Update Readme | Fix platformer example
1 parent bf6f9b9 commit 1909203

File tree

3 files changed

+33
-33
lines changed

3 files changed

+33
-33
lines changed

README.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,17 @@ A pseudo code:
2323

2424
```Go
2525
func (g *Game) Update() error {
26-
g.MainCamera.LookAt(player.X, player.Y)
27-
playerDrawImageOptions.GeoM.Reset()
28-
// Apply all world-space `playerDrawImageOptions.GeoM{}` transform here
26+
MainCamera.LookAt(playerCenter.X, playerCenter.Y)
27+
return nil
2928
}
29+
3030
func (g *Game) Draw(screen *ebiten.Image) {
31-
g.MainCamera.Draw(playerImage, playerDrawImageOptions, screen)
31+
playerDrawImageOptions.GeoM.Reset() // GeoM must be reset
32+
playerDrawImageOptions.GeoM.Translate(playerTopLeft.X, playerTopLeft.Y) // Move player
33+
MainCamera.Draw(playerImage, playerDrawImageOptions, screen)
3234
}
3335
```
36+
3437
## Examples
3538

3639
### Platformer

examples/director/main.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,19 +93,20 @@ func (g *Game) Update() error {
9393
cam.Reset()
9494
}
9595

96-
cam.LookAt(targetX, targetY)
97-
dio.GeoM.Reset()
9896
aX, aY := Normalize(Axis())
9997
aX *= camSpeed
10098
aY *= camSpeed
10199

102100
targetX += aX
103101
targetY += aY
104102

103+
cam.LookAt(targetX, targetY)
104+
105105
return nil
106106
}
107107

108108
func (g *Game) Draw(screen *ebiten.Image) {
109+
dio.GeoM.Reset() // GeoM must be reset
109110
cam.Draw(spriteSheet, dio, screen)
110111

111112
// Draw camera crosshair

examples/platformer/main.go

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,23 @@ var (
4747
offset = [2]int{0, 0}
4848
gridSize = [2]int{8, 8}
4949
tileSize = [2]int{64, 64}
50-
box = [4]float64{70, 70, 24, 32}
50+
playerBox = [4]float64{70, 70, 24, 32} // x, y, w, h
5151
vel = [2]float64{0, 4}
52-
cam = kamera.NewCamera(box[0], box[1], float64(screenWidth), float64(screenHeight))
52+
cam = kamera.NewCamera(playerBox[0], playerBox[1], float64(screenWidth), float64(screenHeight))
5353
controller = NewPlayerController()
5454
collider = tilecollider.NewCollider(tileMap, tileSize[0], tileSize[1])
55+
tileDIO = &ebiten.DrawImageOptions{}
56+
playerDIO = &ebiten.DrawImageOptions{}
57+
tileImage = ebiten.NewImage(tileSize[0], tileSize[1])
58+
playerImage = ebiten.NewImage(24, 32)
5559
)
5660

5761
func init() {
5862
cam.SmoothType = kamera.SmoothDamp
5963
cam.ShakeEnabled = true
6064

65+
tileImage.Fill(color.RGBA{0, 0, 255, 0})
66+
playerImage.Fill(color.Gray{100})
6167
controller.SetPhyicsScale(2.2)
6268
}
6369

@@ -130,13 +136,13 @@ func (g *Game) Update() error {
130136
if inpututil.IsKeyJustPressed(ebiten.KeyTab) {
131137
switch cam.SmoothType {
132138
case kamera.None:
133-
cam.SetCenter(box[0]+box[2]/2, box[1]+box[3]/2)
139+
cam.SetCenter(playerBox[0]+playerBox[2]/2, playerBox[1]+playerBox[3]/2)
134140
cam.SmoothType = kamera.Lerp
135141
case kamera.Lerp:
136-
cam.SetCenter(box[0]+box[2]/2, box[1]+box[3]/2)
142+
cam.SetCenter(playerBox[0]+playerBox[2]/2, playerBox[1]+playerBox[3]/2)
137143
cam.SmoothType = kamera.SmoothDamp
138144
case kamera.SmoothDamp:
139-
cam.SetCenter(box[0]+box[2]/2, box[1]+box[3]/2)
145+
cam.SetCenter(playerBox[0]+playerBox[2]/2, playerBox[1]+playerBox[3]/2)
140146
cam.SmoothType = kamera.None
141147
}
142148
}
@@ -146,10 +152,10 @@ func (g *Game) Update() error {
146152
}
147153
vel = controller.ProcessVelocity(vel)
148154
dx, dy := collider.Collide(
149-
box[0],
150-
box[1],
151-
box[2],
152-
box[3],
155+
playerBox[0],
156+
playerBox[1],
157+
playerBox[2],
158+
playerBox[3],
153159
vel[0],
154160
vel[1],
155161
func(infos []tilecollider.CollisionInfo[uint8], _, _ float64) {
@@ -168,10 +174,10 @@ func (g *Game) Update() error {
168174
},
169175
)
170176

171-
Translate(&box, dx, dy)
177+
Translate(&playerBox, dx, dy)
172178

173179
// Update camera
174-
cam.LookAt(box[0]+box[2]/2, box[1]+box[3]/2)
180+
cam.LookAt(playerBox[0]+playerBox[2]/2, playerBox[1]+playerBox[3]/2)
175181

176182
return nil
177183
}
@@ -188,27 +194,17 @@ func (g *Game) Draw(s *ebiten.Image) {
188194
for y, row := range tileMap {
189195
for x, value := range row {
190196
if value != 0 {
191-
px, py := float64(x*tileSize[0]), float64(y*tileSize[1])
192-
geom := &ebiten.GeoM{}
193-
cam.ApplyCameraTransform(geom)
194-
px, py = geom.Apply(px, py)
195-
vector.StrokeRect(
196-
s,
197-
float32(px),
198-
float32(py),
199-
float32(tileSize[0]),
200-
float32(tileSize[1]),
201-
1,
202-
color.RGBA{R: 80, G: 80, B: 200, A: 255},
203-
false,
204-
)
197+
tileDIO.GeoM.Reset()
198+
tileDIO.GeoM.Translate(float64(x*tileSize[0]), float64(y*tileSize[1]))
199+
cam.Draw(tileImage, tileDIO, s)
205200
}
206201
}
207202
}
208203

209204
// Draw player
210-
x, y := cam.ApplyCameraTransformToPoint(box[0], box[1])
211-
vector.DrawFilledRect(s, float32(x), float32(y), float32(box[2]), float32(box[3]), color.Gray{100}, false)
205+
playerDIO.GeoM.Reset()
206+
playerDIO.GeoM.Translate(playerBox[0], playerBox[1])
207+
cam.Draw(playerImage, playerDIO, s)
212208

213209
// Draw camera crosshair
214210
cx, cy := float32(screenWidth/2), float32(screenHeight/2)

0 commit comments

Comments
 (0)