本文整理汇总了Golang中github.com/gdamore/tcell.Event.Collider方法的典型用法代码示例。如果您正苦于以下问题:Golang Event.Collider方法的具体用法?Golang Event.Collider怎么用?Golang Event.Collider使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/gdamore/tcell.Event
的用法示例。
在下文中一共展示了Event.Collider方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: HandleEvent
func (o *hfence) HandleEvent(ev tcell.Event) bool {
if o.dead {
return false
}
switch ev := ev.(type) {
case *EventCollision:
switch ev.Collider().Layer() {
case LayerPlayer:
switch ev.Target() {
case o.lemit:
o.destroy(o.lemit, o.remit)
case o.remit:
o.destroy(o.remit, o.lemit)
}
case LayerShot:
switch ev.Target() {
case o.lemit:
o.destroy(o.lemit, o.remit)
case o.remit:
o.destroy(o.remit, o.lemit)
case o.beam:
x, y, _, _ := ev.Collider().Bounds()
props := GameObjectProps{}
props.PropSetInt("x", x)
props.PropSetInt("y", y)
props.PropSetInt("count", 1)
props.PropSetString("sprite", "TinyExplosion")
MakeGameObject(o.level, "explosion", props)
}
}
}
return false
}
示例2: HandleEvent
func (o *gantry) HandleEvent(ev tcell.Event) bool {
s := o.sprite
switch ev := ev.(type) {
case *EventSpriteMove:
x, _ := o.sprite.Position()
if o.startx != 0 && o.startx-5 >= x {
o.sprite.SetVelocity(0, 0)
}
case *EventCollision:
switch ev.Collider().Layer() {
case LayerShot, LayerPlayer:
o.sprite.Hide()
x, y, _, _ := s.Bounds()
props := GameObjectProps{}
props.PropSetInt("x", x)
props.PropSetInt("y", y)
props.PropSetInt("count", 2)
MakeGameObject(o.level, "explosion", props)
}
case *EventLevelStart:
o.sprite.SetVelocity(-3.0, 0)
o.sprite.SetFrame("RETRACT")
o.startx, _ = o.sprite.Position()
}
return false
}
示例3: HandleEvent
func (o *alien1) HandleEvent(ev tcell.Event) bool {
s := o.sprite
switch ev := ev.(type) {
case *EventSpriteAccelerate:
if ev.s != s {
return false
}
vx, _ := s.Velocity()
if vx > 0 {
s.SetFrame("F1")
} else {
s.SetFrame("R1")
}
case *EventCollision:
switch ev.Collider().Layer() {
case LayerTerrain, LayerHazard:
x, y, _, _ := s.Bounds()
vx, vy := s.Velocity()
vx = -vx
vy = -vy
s.SetVelocity(vx, vy)
if vx < 0 {
x--
} else if vx > 0 {
x++
}
if vy < 0 {
y--
} else if vy > 0 {
y++
}
s.SetPosition(x, y)
case LayerShot, LayerPlayer:
s.Hide()
x, y, _, _ := s.Bounds()
props := GameObjectProps{}
props.PropSetInt("x", x)
props.PropSetInt("y", y)
props.PropSetInt("count", 1)
MakeGameObject(o.level, "smexplosion", props)
o.level.RemoveSprite(o.sprite)
}
}
return false
}
示例4: HandleEvent
func (o *bullet) HandleEvent(ev tcell.Event) bool {
switch ev := ev.(type) {
case *EventSpriteAccelerate:
if ev.s != o.sprite {
return false
}
vx, _ := o.sprite.Velocity()
if vx > 0 {
o.sprite.SetFrame("H")
} else {
o.sprite.SetFrame("V")
}
case *EventSpriteMove:
if ev.s != o.sprite {
return false
}
x, y, _, _ := o.sprite.Bounds()
w, h := o.level.Size()
if x < 0 || y < 0 || x >= w || y >= h {
o.destroy()
}
case *EventCollision:
switch ev.Collider().Layer() {
case LayerTerrain, LayerHazard, LayerPlayer, LayerExplosion:
// Impact with most solid objects removes the shot.
// The impacted object is responsible for painting
// any explosive effect.
o.destroy()
}
case *EventAlarm:
o.destroy()
}
return false
}
示例5: HandleEvent
func (o *ship) HandleEvent(ev tcell.Event) bool {
if o.dead {
return false
}
switch ev := ev.(type) {
case *EventSpriteAccelerate:
if ev.s != o.ship {
return false
}
vx, _ := o.ship.Velocity()
if vx >= 1.0 {
o.ship.SetFrame("RIGHT")
} else if vx <= -1.0 {
o.ship.SetFrame("LEFT")
} else {
o.ship.SetFrame("FWD")
}
case *EventSpriteMove:
// We don't let ship leave the map
x, y := o.ship.Position()
ox, oy := x, y
vx, vy := o.ship.Velocity()
w, h := o.level.Size()
if x < 0 {
x = 0
if vx < 0 {
vx = 0
}
} else if x >= w {
x = w - 1
if vx > 0 {
vx = 0
}
}
if y < 0 {
y = 0
if vy < 0 {
vy = 0
}
} else if y >= h {
y = h - 1
if vy > 0 {
vy = 0
}
}
if ox != x || oy != y {
o.ship.SetPosition(x, y)
o.ship.SetVelocity(vx, vy)
}
if y == 0 {
o.dead = true
o.level.HandleEvent(&EventLevelComplete{})
}
o.adjustView()
case *EventGravity:
now := ev.When()
if !o.lastgrav.IsZero() {
vx, vy := o.ship.Velocity()
frac := float64(now.Sub(o.lastgrav))
frac /= float64(time.Second)
vy += ev.Accel() * frac
o.ship.SetVelocity(vx, vy)
}
o.lastgrav = now
case *EventCollision:
switch ev.Collider().Layer() {
case LayerTerrain, LayerHazard, LayerShot:
o.destroy()
case LayerPad:
// if we're on the pad, and not too
// fast, then stay on the pad.
// TODO: probably the max velocity (4.0)
// should be tunable.
vx, vy := o.ship.Velocity()
x, y := o.ship.Position()
if vx == 0 && vy > 0 && vy < 4.0 {
y--
vy = 0
o.ship.SetPosition(x, y)
o.ship.SetVelocity(vx, vy)
o.launched = false
} else {
o.destroy()
}
}
case *EventTimesUp:
o.destroy()
case *tcell.EventKey:
switch ev.Key() {
case tcell.KeyLeft:
o.thrustLeft()
return true
case tcell.KeyRight:
o.thrustRight()
//.........这里部分代码省略.........