mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-25 03:08:54 +01:00
examples/common: Use SourceRect (#277)
This commit is contained in:
parent
f88d5ab1ef
commit
0d1d6cfd85
@ -158,8 +158,8 @@ func drawGroundImage(screen *ebiten.Image, ground *ebiten.Image) {
|
|||||||
op.GeoM.Translate(float64(w)/2, 0)
|
op.GeoM.Translate(float64(w)/2, 0)
|
||||||
op.GeoM.Translate(float64(screenWidth-w)/2, screenHeight/3)
|
op.GeoM.Translate(float64(screenWidth-w)/2, screenHeight/3)
|
||||||
|
|
||||||
p := image.Rect(0, i, w, i+1)
|
src := image.Rect(0, i, w, i+1)
|
||||||
op.SourceRect = &p
|
op.SourceRect = &src
|
||||||
screen.DrawImage(ground, op)
|
screen.DrawImage(ground, op)
|
||||||
}
|
}
|
||||||
op = &ebiten.DrawImageOptions{}
|
op = &ebiten.DrawImageOptions{}
|
||||||
|
@ -166,8 +166,8 @@ func drawBlocks(r *ebiten.Image, blocks [][]BlockType, x, y int, clr ebiten.Colo
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
x := (int(block) - 1) * blockWidth
|
x := (int(block) - 1) * blockWidth
|
||||||
p := image.Rect(x, 0, x+blockWidth, blockHeight)
|
src := image.Rect(x, 0, x+blockWidth, blockHeight)
|
||||||
op.SourceRect = &p
|
op.SourceRect = &src
|
||||||
r.DrawImage(imageBlocks, op)
|
r.DrawImage(imageBlocks, op)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,43 +56,8 @@ func init() {
|
|||||||
ArcadeFont = &Font{eimg, img, 32, 16, 8, 8}
|
ArcadeFont = &Font{eimg, img, 32, 16, 8, 8}
|
||||||
}
|
}
|
||||||
|
|
||||||
type fontImageParts struct {
|
|
||||||
str string
|
|
||||||
font *Font
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *fontImageParts) Len() int {
|
|
||||||
return len(f.str)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *fontImageParts) Dst(i int) (x0, y0, x1, y1 int) {
|
|
||||||
x := i - strings.LastIndex(f.str[:i], "\n") - 1
|
|
||||||
y := strings.Count(f.str[:i], "\n")
|
|
||||||
x *= f.font.charWidth
|
|
||||||
y *= f.font.charHeight
|
|
||||||
if x < 0 {
|
|
||||||
return 0, 0, 0, 0
|
|
||||||
}
|
|
||||||
return x, y, x + f.font.charWidth, y + f.font.charHeight
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *fontImageParts) Src(i int) (x0, y0, x1, y1 int) {
|
|
||||||
code := int(f.str[i])
|
|
||||||
if code == '\n' {
|
|
||||||
return 0, 0, 0, 0
|
|
||||||
}
|
|
||||||
x := (code % f.font.charNumPerLine) * f.font.charWidth
|
|
||||||
y := ((code - f.font.offset) / f.font.charNumPerLine) * f.font.charHeight
|
|
||||||
return x, y, x + f.font.charWidth, y + f.font.charHeight
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *Font) DrawText(rt *ebiten.Image, str string, ox, oy, scale int, c color.Color) {
|
func (f *Font) DrawText(rt *ebiten.Image, str string, ox, oy, scale int, c color.Color) {
|
||||||
options := &ebiten.DrawImageOptions{
|
op := &ebiten.DrawImageOptions{}
|
||||||
ImageParts: &fontImageParts{str, f},
|
|
||||||
}
|
|
||||||
options.GeoM.Scale(float64(scale), float64(scale))
|
|
||||||
options.GeoM.Translate(float64(ox), float64(oy))
|
|
||||||
|
|
||||||
ur, ug, ub, ua := c.RGBA()
|
ur, ug, ub, ua := c.RGBA()
|
||||||
const max = math.MaxUint16
|
const max = math.MaxUint16
|
||||||
r := float64(ur) / max
|
r := float64(ur) / max
|
||||||
@ -104,8 +69,27 @@ func (f *Font) DrawText(rt *ebiten.Image, str string, ox, oy, scale int, c color
|
|||||||
g /= a
|
g /= a
|
||||||
b /= a
|
b /= a
|
||||||
}
|
}
|
||||||
options.ColorM.Scale(r, g, b, a)
|
op.ColorM.Scale(r, g, b, a)
|
||||||
rt.DrawImage(f.image, options)
|
|
||||||
|
x := 0
|
||||||
|
y := 0
|
||||||
|
for _, c := range str {
|
||||||
|
if c == '\n' {
|
||||||
|
x = 0
|
||||||
|
y += f.charHeight
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
sx := (int(c) % f.charNumPerLine) * f.charWidth
|
||||||
|
sy := ((int(c) - f.offset) / f.charNumPerLine) * f.charHeight
|
||||||
|
r := image.Rect(sx, sy, sx+f.charWidth, sy+f.charHeight)
|
||||||
|
op.SourceRect = &r
|
||||||
|
op.GeoM.Reset()
|
||||||
|
op.GeoM.Translate(float64(x), float64(y))
|
||||||
|
op.GeoM.Scale(float64(scale), float64(scale))
|
||||||
|
op.GeoM.Translate(float64(ox), float64(oy))
|
||||||
|
rt.DrawImage(f.image, op)
|
||||||
|
x += f.charWidth
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Font) DrawTextOnImage(rt draw.Image, str string, ox, oy int) {
|
func (f *Font) DrawTextOnImage(rt draw.Image, str string, ox, oy int) {
|
||||||
|
@ -49,8 +49,8 @@ func update(screen *ebiten.Image) error {
|
|||||||
maxWidth := float64(w) + float64(h)*3/4
|
maxWidth := float64(w) + float64(h)*3/4
|
||||||
op.GeoM.Translate(-maxWidth/2, -float64(h)/2)
|
op.GeoM.Translate(-maxWidth/2, -float64(h)/2)
|
||||||
op.GeoM.Translate(screenWidth/2, screenHeight/2)
|
op.GeoM.Translate(screenWidth/2, screenHeight/2)
|
||||||
p := image.Rect(0, i, w, i+1)
|
r := image.Rect(0, i, w, i+1)
|
||||||
op.SourceRect = &p
|
op.SourceRect = &r
|
||||||
screen.DrawImage(gophersImage, op)
|
screen.DrawImage(gophersImage, op)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user