mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-24 02:38:53 +01:00
examples/perspective: Refactoring
This commit is contained in:
parent
c4faf5b12c
commit
531e661f0b
@ -38,17 +38,25 @@ func update(screen *ebiten.Image) error {
|
||||
if ebiten.IsRunningSlowly() {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Split the image into horizontal lines and draw them with different scales.
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
w, h := gophersImage.Size()
|
||||
for i := 0; i < h; i++ {
|
||||
op.GeoM.Reset()
|
||||
width := w + i*3/4
|
||||
x := ((h - i) * 3 / 4) / 2
|
||||
op.GeoM.Scale(float64(width)/float64(w), 1)
|
||||
op.GeoM.Translate(float64(x), float64(i))
|
||||
maxWidth := float64(w) + float64(h)*3/4
|
||||
op.GeoM.Translate(-maxWidth/2, -float64(h)/2)
|
||||
|
||||
// Move the image's center to the upper-left corner.
|
||||
op.GeoM.Translate(-float64(w)/2, -float64(h)/2)
|
||||
|
||||
// Scale each lines and adjust the position.
|
||||
lineW := w + i*3/4
|
||||
x := -float64(lineW) / float64(w) / 2
|
||||
op.GeoM.Scale(float64(lineW)/float64(w), 1)
|
||||
op.GeoM.Translate(x, float64(i))
|
||||
|
||||
// Move the image's center to the screen's center.
|
||||
op.GeoM.Translate(screenWidth/2, screenHeight/2)
|
||||
|
||||
r := image.Rect(0, i, w, i+1)
|
||||
op.SourceRect = &r
|
||||
screen.DrawImage(gophersImage, op)
|
||||
|
Loading…
Reference in New Issue
Block a user