日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS基础之打砖块项目演练

發(fā)布時(shí)間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS基础之打砖块项目演练 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

IOS基礎(chǔ)之打磚塊項(xiàng)目演練


本項(xiàng)目涉及CADisplayLink核心動畫,各個(gè)控件的使用,運(yùn)行循環(huán),邏輯判斷等,if和for,frame坐標(biāo)的改變,CGPoint結(jié)構(gòu)體,成員變量的賦值,兩種手勢,拖拽手勢和屏幕點(diǎn)擊手勢,手勢坐標(biāo)的獲取等知識點(diǎn)。項(xiàng)目源碼名稱是 打磚塊項(xiàng)目oc和swift.zip,代碼已做格式化處理,該換行,該整齊都做了規(guī)范
oc寫法

// // ViewController.m // 打磚塊 // // Created by lujun on 2021/6/1. //#import "ViewController.h" #import <QuartzCore/QuartzCore.h>@interface ViewController () {CGPoint _originBallCenter;CADisplayLink *_gameTimer;CGPoint _ballVelocity;//擋板的水平速度CGFloat _paddleVelocityX;//擋板的初始中心位置CGPoint _originPaddleCenter; } @property (weak, nonatomic) IBOutlet UILabel *begainLabel; @property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *blockImage; @property (weak, nonatomic) IBOutlet UIImageView *paddleImageView; @property (strong, nonatomic) IBOutlet UITapGestureRecognizer *tapGesture; @property (weak, nonatomic) IBOutlet UIImageView *ballImageView; @end @implementation ViewController //拖拽擋板的事件 - (IBAction)dragPaddle:(UIPanGestureRecognizer *)sender {if(UIGestureRecognizerStateChanged == sender.state){CGPoint location = [sender locationInView:self.view];_paddleImageView.center = CGPointMake(location.x, _paddleImageView.center.y);_paddleVelocityX = [sender velocityInView:self.view].x;}else if (UIGestureRecognizerStateEnded==sender.state){//恢復(fù)手指移動速度_paddleVelocityX = 0;} } //小球與磚塊的碰撞檢測 -(void)intersectWithBlocks{for(UIButton *item in self.blockImage){if(CGRectIntersectsRect(item.frame, self.ballImageView.frame) && ![item isHidden]){_ballVelocity.y *= -1;item.hidden = YES;}}//所有的磚塊都隱藏,說明贏了BOOL win = YES;for(UIButton *btn in self.blockImage){if(![btn isHidden]){win = NO;break;}}if(win){//關(guān)閉 時(shí)鐘[_gameTimer invalidate];self.begainLabel.hidden = NO;self.begainLabel.text = @"哦耶,你贏了~~~~~~";[_tapGesture setEnabled:YES];} } //檢測與擋板的碰撞檢測 -(void)intersectWithPaddle{if(CGRectIntersectsRect(_ballImageView.frame, self.paddleImageView.frame)){_ballVelocity.y = -ABS(_ballVelocity.y);_ballVelocity.x += _paddleVelocityX / 120;} }- (IBAction)clickGester:(id)sender {self.begainLabel.hidden = YES;self.tapGesture.enabled = NO;_ballVelocity = CGPointMake(0.0, -5.0);_gameTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(step)];//把游戲時(shí)鐘添加到主運(yùn)行循環(huán)之中[_gameTimer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];//小球_ballImageView.center = _originBallCenter;_paddleImageView.center = _originPaddleCenter;//磚塊 隱藏for(UIButton *btn in self.blockImage){btn.hidden = NO;} } -(void)intersectWithScreen{if(CGRectGetMaxY(_ballImageView.frame) <= 0){_ballVelocity.y = ABS(_ballVelocity.y);}if(CGRectGetMinX(_ballImageView.frame)<=0){_ballVelocity.x = ABS(_ballVelocity.x);}if(CGRectGetMaxX(_ballImageView.frame)>=self.view.bounds.size.width){_ballVelocity.x = -ABS(_ballVelocity.x);}if(CGRectGetMinY(_ballImageView.frame) >= self.view.bounds.size.height){// NSLog(@"你輸了");//關(guān)閉 時(shí)鐘[_gameTimer invalidate];self.begainLabel.hidden = NO;self.begainLabel.text = @"你輸了~~~~~~";[_tapGesture setEnabled:YES];} } -(void)step{// NSLog(@"屏幕刷新了");//更新小球位置[self intersectWithScreen];[self intersectWithBlocks];[self intersectWithPaddle];[_ballImageView setCenter:CGPointMake(_ballImageView.center.x + _ballVelocity.x, _ballImageView.center.y + _ballVelocity.y)]; } - (void)viewDidLoad {[super viewDidLoad];_originBallCenter = self.ballImageView.center;_originPaddleCenter = self.paddleImageView.center; } - (BOOL)prefersStatusBarHidden{return YES; } @end

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("被點(diǎn)擊了")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} }

總結(jié)

以上是生活随笔為你收集整理的IOS基础之打砖块项目演练的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。