mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-26 03:38:55 +01:00
parent
fa942c824f
commit
5e15bafde8
@ -17,7 +17,6 @@ package ebitenutil
|
|||||||
import (
|
import (
|
||||||
"image"
|
"image"
|
||||||
"image/color"
|
"image/color"
|
||||||
"math"
|
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/v2"
|
"github.com/hajimehoshi/ebiten/v2"
|
||||||
"github.com/hajimehoshi/ebiten/v2/vector"
|
"github.com/hajimehoshi/ebiten/v2/vector"
|
||||||
@ -53,20 +52,8 @@ func DrawRect(dst *ebiten.Image, x, y, width, height float64, clr color.Color) {
|
|||||||
// DrawCircle draws a circle on given destination dst.
|
// DrawCircle draws a circle on given destination dst.
|
||||||
//
|
//
|
||||||
// DrawCircle is intended to be used mainly for debugging or prototyping purpose.
|
// DrawCircle is intended to be used mainly for debugging or prototyping purpose.
|
||||||
|
//
|
||||||
|
// Deprecated: as of v2.5. Use vector.FillCircle instead.
|
||||||
func DrawCircle(dst *ebiten.Image, cx, cy, r float64, clr color.Color) {
|
func DrawCircle(dst *ebiten.Image, cx, cy, r float64, clr color.Color) {
|
||||||
var path vector.Path
|
vector.FillCircle(dst, float32(cx), float32(cy), float32(r), clr)
|
||||||
rd, g, b, a := clr.RGBA()
|
|
||||||
|
|
||||||
path.Arc(float32(cx), float32(cy), float32(r), 0, 2*math.Pi, vector.Clockwise)
|
|
||||||
|
|
||||||
vertices, indices := path.AppendVerticesAndIndicesForFilling(nil, nil)
|
|
||||||
for i := range vertices {
|
|
||||||
vertices[i].SrcX = 1
|
|
||||||
vertices[i].SrcY = 1
|
|
||||||
vertices[i].ColorR = float32(rd) / 0xffff
|
|
||||||
vertices[i].ColorG = float32(g) / 0xffff
|
|
||||||
vertices[i].ColorB = float32(b) / 0xffff
|
|
||||||
vertices[i].ColorA = float32(a) / 0xffff
|
|
||||||
}
|
|
||||||
dst.DrawTriangles(vertices, indices, whiteSubImage, nil)
|
|
||||||
}
|
}
|
||||||
|
@ -343,9 +343,9 @@ func (p *Player) draw(screen *ebiten.Image) {
|
|||||||
|
|
||||||
// Draw the cursor on the bar.
|
// Draw the cursor on the bar.
|
||||||
c := p.current
|
c := p.current
|
||||||
cx := float64(x) + float64(w)*float64(p.current)/float64(p.total)
|
cx := float32(x) + float32(w)*float32(p.current)/float32(p.total)
|
||||||
cy := float64(y) + float64(h)/2
|
cy := float32(y) + float32(h)/2
|
||||||
ebitenutil.DrawCircle(screen, cx, cy, 12, playerCurrentColor)
|
vector.FillCircle(screen, cx, cy, 12, playerCurrentColor)
|
||||||
|
|
||||||
// Compose the curren time text.
|
// Compose the curren time text.
|
||||||
m := (c / time.Minute) % 100
|
m := (c / time.Minute) % 100
|
||||||
|
@ -46,10 +46,13 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
cf := float32(g.count)
|
cf := float32(g.count)
|
||||||
vector.StrokeLine(screen, 100, 100, 300, 100, 1, color.RGBA{0xff, 0xff, 0xff, 0xff})
|
vector.StrokeLine(screen, 100, 100, 300, 100, 1, color.RGBA{0xff, 0xff, 0xff, 0xff})
|
||||||
vector.StrokeLine(screen, 50, 150, 50, 350, 1, color.RGBA{0xff, 0xff, 0x00, 0xff})
|
vector.StrokeLine(screen, 50, 150, 50, 350, 1, color.RGBA{0xff, 0xff, 0x00, 0xff})
|
||||||
vector.StrokeLine(screen, 50, 100+float32(cf), 200+float32(cf), 250, 4, color.RGBA{0x00, 0xff, 0xff, 0xff})
|
vector.StrokeLine(screen, 50, 100+cf, 200+cf, 250, 4, color.RGBA{0x00, 0xff, 0xff, 0xff})
|
||||||
|
|
||||||
vector.FillRect(screen, 50+float32(cf), 50+float32(cf), 100+float32(cf), 100+float32(cf), color.RGBA{0x80, 0x80, 0x80, 0xff})
|
vector.FillRect(screen, 50+cf, 50+cf, 100+cf, 100+cf, color.RGBA{0x80, 0x80, 0x80, 0xc0})
|
||||||
vector.StrokeRect(screen, 300-float32(cf), 50, 120, 120, 10, color.RGBA{0x00, 0x80, 0x00, 0xff})
|
vector.StrokeRect(screen, 300-cf, 50, 120, 120, 10+cf/4, color.RGBA{0x00, 0x80, 0x00, 0xff})
|
||||||
|
|
||||||
|
vector.FillCircle(screen, 400, 400, 100, color.RGBA{0x80, 0x00, 0x80, 0x80})
|
||||||
|
vector.StrokeCircle(screen, 400, 400, 10+cf, 10+cf/2, color.RGBA{0xff, 0x80, 0xff, 0xff})
|
||||||
|
|
||||||
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.ActualTPS()))
|
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.ActualTPS()))
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ package vector
|
|||||||
import (
|
import (
|
||||||
"image"
|
"image"
|
||||||
"image/color"
|
"image/color"
|
||||||
|
"math"
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/v2"
|
"github.com/hajimehoshi/ebiten/v2"
|
||||||
)
|
)
|
||||||
@ -30,7 +31,7 @@ func init() {
|
|||||||
whiteImage.Fill(color.White)
|
whiteImage.Fill(color.White)
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateVerticesForUtil(vs []ebiten.Vertex, clr color.Color) {
|
func drawVerticesForUtil(dst *ebiten.Image, vs []ebiten.Vertex, is []uint16, clr color.Color) {
|
||||||
r, g, b, a := clr.RGBA()
|
r, g, b, a := clr.RGBA()
|
||||||
for i := range vs {
|
for i := range vs {
|
||||||
vs[i].SrcX = 1
|
vs[i].SrcX = 1
|
||||||
@ -40,6 +41,11 @@ func updateVerticesForUtil(vs []ebiten.Vertex, clr color.Color) {
|
|||||||
vs[i].ColorB = float32(b) / 0xffff
|
vs[i].ColorB = float32(b) / 0xffff
|
||||||
vs[i].ColorA = float32(a) / 0xffff
|
vs[i].ColorA = float32(a) / 0xffff
|
||||||
}
|
}
|
||||||
|
|
||||||
|
op := &ebiten.DrawTrianglesOptions{}
|
||||||
|
op.ColorScaleFormat = ebiten.ColorScaleFormatPremultipliedAlpha
|
||||||
|
op.AntiAlias = true
|
||||||
|
dst.DrawTriangles(vs, is, whiteSubImage, op)
|
||||||
}
|
}
|
||||||
|
|
||||||
// StrokeLine strokes a line (x0, y0)-(x1, y1) with the specified width and color.
|
// StrokeLine strokes a line (x0, y0)-(x1, y1) with the specified width and color.
|
||||||
@ -51,12 +57,7 @@ func StrokeLine(dst *ebiten.Image, x0, y0, x1, y1 float32, strokeWidth float32,
|
|||||||
strokeOp.Width = strokeWidth
|
strokeOp.Width = strokeWidth
|
||||||
vs, is := path.AppendVerticesAndIndicesForStroke(nil, nil, strokeOp)
|
vs, is := path.AppendVerticesAndIndicesForStroke(nil, nil, strokeOp)
|
||||||
|
|
||||||
updateVerticesForUtil(vs, clr)
|
drawVerticesForUtil(dst, vs, is, clr)
|
||||||
|
|
||||||
op := &ebiten.DrawTrianglesOptions{}
|
|
||||||
op.ColorScaleFormat = ebiten.ColorScaleFormatPremultipliedAlpha
|
|
||||||
op.AntiAlias = true
|
|
||||||
dst.DrawTriangles(vs, is, whiteSubImage, op)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FillRect fills a rectangle with the specified width and color.
|
// FillRect fills a rectangle with the specified width and color.
|
||||||
@ -68,12 +69,7 @@ func FillRect(dst *ebiten.Image, x, y, width, height float32, clr color.Color) {
|
|||||||
path.LineTo(x+width, y)
|
path.LineTo(x+width, y)
|
||||||
vs, is := path.AppendVerticesAndIndicesForFilling(nil, nil)
|
vs, is := path.AppendVerticesAndIndicesForFilling(nil, nil)
|
||||||
|
|
||||||
updateVerticesForUtil(vs, clr)
|
drawVerticesForUtil(dst, vs, is, clr)
|
||||||
|
|
||||||
op := &ebiten.DrawTrianglesOptions{}
|
|
||||||
op.ColorScaleFormat = ebiten.ColorScaleFormatPremultipliedAlpha
|
|
||||||
op.AntiAlias = true
|
|
||||||
dst.DrawTriangles(vs, is, whiteSubImage, op)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// StrokeRect strokes a rectangle with the specified width and color.
|
// StrokeRect strokes a rectangle with the specified width and color.
|
||||||
@ -92,10 +88,29 @@ func StrokeRect(dst *ebiten.Image, x, y, width, height float32, strokeWidth floa
|
|||||||
strokeOp.MiterLimit = 10
|
strokeOp.MiterLimit = 10
|
||||||
vs, is := path.AppendVerticesAndIndicesForStroke(nil, nil, strokeOp)
|
vs, is := path.AppendVerticesAndIndicesForStroke(nil, nil, strokeOp)
|
||||||
|
|
||||||
updateVerticesForUtil(vs, clr)
|
drawVerticesForUtil(dst, vs, is, clr)
|
||||||
|
}
|
||||||
op := &ebiten.DrawTrianglesOptions{}
|
|
||||||
op.ColorScaleFormat = ebiten.ColorScaleFormatPremultipliedAlpha
|
// FillCircle filles a circle with the specified center position (cx, cy), the radius (r), width and color.
|
||||||
op.AntiAlias = true
|
func FillCircle(dst *ebiten.Image, cx, cy, r float32, clr color.Color) {
|
||||||
dst.DrawTriangles(vs, is, whiteSubImage, op)
|
var path Path
|
||||||
|
path.Arc(float32(cx), float32(cy), float32(r), 0, 2*math.Pi, Clockwise)
|
||||||
|
vs, is := path.AppendVerticesAndIndicesForFilling(nil, nil)
|
||||||
|
|
||||||
|
drawVerticesForUtil(dst, vs, is, clr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StrokeCircle strokes a circle with the specified center position (cx, cy), the radius (r), width and color.
|
||||||
|
//
|
||||||
|
// clr has be to be a solid (non-transparent) color.
|
||||||
|
func StrokeCircle(dst *ebiten.Image, cx, cy, r float32, strokeWidth float32, clr color.Color) {
|
||||||
|
var path Path
|
||||||
|
path.Arc(float32(cx), float32(cy), float32(r), 0, 2*math.Pi, Clockwise)
|
||||||
|
path.Close()
|
||||||
|
|
||||||
|
strokeOp := &StrokeOptions{}
|
||||||
|
strokeOp.Width = strokeWidth
|
||||||
|
vs, is := path.AppendVerticesAndIndicesForStroke(nil, nil, strokeOp)
|
||||||
|
|
||||||
|
drawVerticesForUtil(dst, vs, is, clr)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user