• Winform打砖块游戏制作step by step第7节---碰撞检测


    一 引子

    为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持。

    预备知识,无GDI画图基础的童鞋请先阅读一篇文章让你彻底弄懂WinForm GDI 编程基本原理

    二 本节内容---碰撞检测

    1.界面截图如下:

     

    三 碰撞检测

    目前碰撞检测主要发生在小球和挡板之间,以及小球和砖块之间,小球和砖块碰撞后,砖块需要被消去,主要代码如下:

     1  //碰撞检测
     2         public void Hit()
     3         {
     4             
     5             //砖块与小球碰撞
     6             for (int i = 0; i < m_bricks.m_Rects.Count; i++)
     7             {
     8                 if (m_ball.Rect.IntersectsWith(m_bricks.m_Rects[i].m_Rect))
     9                 {
    10 
    11                     m_bricks.m_Rects.Remove(m_bricks.m_Rects[i]);
    12 
    13                     m_ball.SpeedX = -m_ball.SpeedX;
    14                     m_ball.SpeedY = -m_ball.SpeedY;
    15 
    16                     //得分
    17                     //score += new Random().Next(50, 80) + 100;
    18                 }
    19             }
    20 
    21             //小球与挡板碰撞
    22             if (m_ball.XPos + m_ball.Rect.Width - 5 >= m_board.XPos && m_ball.XPos <= m_board.XPos + m_board.Rect.Width - 5)
    23             {
    24                 if (m_ball.YPos >= m_board.YPos - m_ball.Rect.Height - 2)
    25                 {
    26                     switch (m_board.Direction)
    27                     {
    28                         case BoardDirection.Left:
    29                             {
    30                                 m_ball.SpeedX = -(new Random().Next(2, 5));//创造一些摩擦力的感觉
    31                             }
    32                             break;
    33                         case BoardDirection.Right:
    34                             {
    35                                 m_ball.SpeedX = (new Random().Next(2, 5));//创造一些摩擦力的感觉
    36                             }
    37                             break;
    38                         default:
    39                             break;
    40                     }
    41                     m_ball.SpeedY = (new Random().Next(2, 5));
    42                 }
    43             }
    44         }

    四 代码下载

    本节代码下载

      

    作者:宋波
    出处:http://www.cnblogs.com/ice-river/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
    正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!旁边有“推荐”二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我!
  • 相关阅读:
    Java中的分代垃圾回收策略
    Java Web容器的启动与处理请求的过程
    利用LRUMap 设计缓存
    《淘宝技术这十年》
    Java中的堆内存、栈内存、静态存储区
    JAVA中的代理技术(静态代理和动态代理)
    java中的synchronized关键字
    代理模式
    状态模式
    SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER
  • 原文地址:https://www.cnblogs.com/ice-river/p/3647332.html
Copyright © 2020-2023  润新知