作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试对 snake.head.frame 进行编码以与 snake.body.frame 相交,但我在 gameOver() 函数中遇到错误 - snake body 是一个 UIImage
实际上尝试插入 snake.body.bodys[].frame 并且我没有收到任何错误,但是在将 snake.head.frame 与 snake.body.bodys[].frame 相交后它没有触发游戏结束
func gameOver() {
if snake.head.frame.intersects(snake.body.frame) // ERROR - {
print("game over")
timer.invalidate()
}
}
// Value of type 'SnakeBody' has no member 'frame'
蛇类:
class Snake {
let head = SnakeHead()
let body = SnakeBody()
weak var mainView: UIView!
var direction = Direction.right
init(view: UIView) {
mainView = view
head.nextItem = body.bodys[0]
view.addSubview(head)
view.addSubview(body.bodys[0])
}
SnakeBody 类:
class SnakeBody {
var startRadius: CGFloat = 20.0
var bodys = [ListBodyItem]()
init() {
bodys.append(conBody(CGRect(x: 60, y: 90, width: 30, height: 30)))
}
func addOne(_ view: UIView) {
let curLast = bodys.last!
bodys.append(conBody(curLast.frame))
curLast.nextItem = bodys.last
view.addSubview(bodys.last!)
}
func conBody(_ frame: CGRect) -> ListBodyItem {
let body = ListBodyItem(frame: frame)
body.setImage(UIImage(named: "snakeBody"), for: UIControlState())
body.clipsToBounds = true
return body
}
}
提前致谢
最佳答案
答案在您自己的问题中。
Value of type 'SnakeBody' has no member 'frame'
您收到此错误是因为 SnakeBody
类没有定义的 frame
。相反,它有一个 ListBodyItem
数组,而这些数组又有框架。修复它的一种方法是创建一个单独的函数来检查蛇的头部是否与 body 的任何部位相交。它看起来像这样。
将以下方法添加到类 SnakeBody
func isIntersectingWithHead(_ frame: CGRect) -> Bool {
var isIntersecting = false
for item in bodys {
if frame.intersects(item.frame) {
isIntersecting = true
break
}
}
return isIntersecting
}
然后将gameOver
方法改为
func gameOver() {
if snake.body.isIntersectingWithHead(snake.head.frame) {
print("game over")
timer.invalidate()
}
}
更新我不知道您实现的其余部分,因此很难准确地告诉您在哪里调用此方法。根据您提供的代码,我的印象是您使用 Timer
调用了 gameOver
方法。由于情况并非如此,我假设您将拥有某种定期(或其他方式)调用并更新蛇框架的函数。你会用那种方法做这样的事情
func updateSnakeFrame() {
//Snake's body and head frame updated here
if isIntersectingWithHead(snake.head.frame) {
gameOver()
}
}
注意通过此实现,您的 gameOver
方法将更改为
func gameOver() {
print("game over")
timer.invalidate() //Only use this line if you actually are using a timer and want to invalidate it here
}
关于swift - 无法让蛇头与其 body 相交以进行 gameOver - Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44620676/
我是一名优秀的程序员,十分优秀!