IOS基础之打砖块项目演练
生活随笔
收集整理的這篇文章主要介紹了
IOS基础之打砖块项目演练
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
IOS基礎之打磚塊項目演練
本項目涉及CADisplayLink核心動畫,各個控件的使用,運行循環,邏輯判斷等,if和for,frame坐標的改變,CGPoint結構體,成員變量的賦值,兩種手勢,拖拽手勢和屏幕點擊手勢,手勢坐標的獲取等知識點。項目源碼名稱是 打磚塊項目oc和swift.zip,代碼已做格式化處理,該換行,該整齊都做了規范
oc寫法
swift寫法
// // ViewController.swift // 打磚塊swift // // Created by lujun on 2021/6/1. //import UIKit import QuartzCoreclass ViewController: UIViewController {//成員變量的定義處var _originBallCenter: CGPoint = CGPoint()var _gameTimer: CADisplayLink = CADisplayLink()var _ballVelocity: CGPoint = CGPoint()var _paddleVelocity: CGFloat = 0.0var _originPaddleCenter: CGPoint = CGPoint()var _paddleVelocityX: CGFloat = 0.0@IBOutlet weak var beginLabel: UILabel!@IBOutlet weak var ballImageView: UIImageView!@IBOutlet weak var paddleImageView: UIImageView!@IBOutlet var blocksImageViews: [UIImageView]!@IBOutlet var tapGester: UITapGestureRecognizer!@IBOutlet var panGester: UIPanGestureRecognizer!@IBAction func panClick(_ sender: UIPanGestureRecognizer) {debugPrint("被拖動了")if(UIGestureRecognizer.State.changed == sender.state){let p: CGPoint = sender.location(in: self.view)self.paddleImageView.center = CGPoint(x: p.x, y: self.paddleImageView.center.y)_paddleVelocityX = sender.velocity(in: self.view).x}if(UIGestureRecognizer.State.ended == sender.state) {_paddleVelocityX = 0;}}@IBAction func tipClick(_ sender: UITapGestureRecognizer) {debugPrint("被點擊了")self.beginLabel.isHidden = trueself.tapGester.isEnabled = false;_ballVelocity = CGPoint(x: 0.0, y: -5.0)_gameTimer = CADisplayLink(target: self, selector: #selector(step))_gameTimer .add(to: RunLoop.main, forMode: .default)self.ballImageView.center = _originBallCenterself.paddleImageView.center = _originPaddleCenterfor item: UIImageView in self.blocksImageViews {item.isHidden = false}}func intersectWithScreen() -> Void{if(self.ballImageView.frame.maxY <= 0){_ballVelocity.y = abs(_ballVelocity.y)}if(self.ballImageView.frame.minX<=0){_ballVelocity.x = abs(_ballVelocity.x)}if(self.ballImageView.frame.maxX >= self.view.bounds.width){_ballVelocity.x = -abs(_ballVelocity.x)}if(self.ballImageView.frame.minY >= self.view.bounds.height){debugPrint("你輸了")_gameTimer.invalidate()self.beginLabel.text = "你輸了"self.beginLabel.isHidden = falseself.tapGester.isEnabled = true}}func intersectWithBlocks() -> Void {for item: UIImageView in self.blocksImageViews {if(item.frame.intersects(self.ballImageView.frame) && !(item.isHidden) ){_ballVelocity.y *= -1item.isHidden = true}}//所有的磚塊都隱藏了;說明是贏了游戲var win: Bool = truefor item: UIImageView in self.blocksImageViews {if(!item.isHidden){win = falsebreak}}if(win){_gameTimer.invalidate()self.beginLabel.isHidden = falseself.beginLabel.text = "哦耶,你贏了~~~~~~"self.tapGester.isEnabled = true}}func intersectWithPaddle(){if(self.ballImageView.frame.intersects(self.paddleImageView.frame)){_ballVelocity.y = -abs(_ballVelocity.y)_ballVelocity.x += _paddleVelocityX / 120;}}override func viewDidLoad() {super.viewDidLoad()_originBallCenter = self.ballImageView.center_originPaddleCenter = self.paddleImageView.center}@objc func step() -> Void{intersectWithScreen()intersectWithBlocks()intersectWithPaddle()self.ballImageView.center = CGPoint(x: self.ballImageView.center.x + _ballVelocity.x, y: self.ballImageView.center.y + _ballVelocity.y)}override var prefersStatusBarHidden: Bool{return true} }總結
以上是生活随笔為你收集整理的IOS基础之打砖块项目演练的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数式编程语言天生就慢吗?
- 下一篇: 18条工作感想:不要不情愿地工作