超级马丽与怪物水平碰撞和跳起上下碰撞检测

超级马丽与怪物的碰撞检测,利用intersectsRect函数检测碰撞。水平碰撞时,怪物杀了超级马丽;跳起来踩怪物时,怪物被杀死。

EnemyVSHero CCEnemy::checkCollisionWithHero()
{
    EnemyVSHero ret = eVS_nonKilled;

    CCPoint heroPos = CCHero::getHeroInstance()->getPosition();
    CCSize heroSize = CCHero::getHeroInstance()->getContentSize();
    CCRect heroRect = CCRectMake(heroPos.x - heroSize.width/2 + 2, heroPos.y + 3,
        heroSize.width - 4, heroSize.height - 4);

    CCRect heroRectVS = CCRectMake(heroPos.x - heroSize.width/2 - 3, heroPos.y,
        heroSize.width - 6, 2);

    CCPoint enemyPos = this->getPosition();
    CCRect enemyRect = CCRectMake(enemyPos.x - bodySize.width/2 + 1, enemyPos.y,
        bodySize.width - 2, bodySize.height - 4);

    CCRect enemyRectVS = CCRectMake(enemyPos.x - bodySize.width/2 - 2, enemyPos.y + bodySize.height - 4,
        bodySize.width - 4, 4);

    if (heroRectVS.intersectsRect(enemyRectVS))
    {
        ret = eVS_enemyKilled;
        return ret;
    }

    if (heroRect.intersectsRect(enemyRect))
    {
        ret = eVS_heroKilled;
        return ret;
    }

    return ret;
}

画一张图,看起来容易理解。

时间: 2024-12-19 21:57:09

超级马丽与怪物水平碰撞和跳起上下碰撞检测的相关文章

飞行游戏中的碰撞算法-边界框碰撞检测

参考源地址http://xxxxxfsadf.iteye.com/blog/540669 在飞行射击游戏中,我们的飞机大多都是三角形的,我们可以用三角形作近似的边界框.现在我们假设飞机是一个正三角形(或等要三角形,我想如果谁把飞机设计成左右不对称的怪物,那他的审美观一定有问题),我的飞机是正着的.向上飞的三角形,敌人的飞机是倒着的.向下飞的三角形,且飞机不会旋转(大部分游戏中都是这样的).我们可以这样定义飞机:中心点O(Xo,Yo),三个顶点P0(X0,Y0).P1(X1,Y1).P2(X2,Y

Cocos2d-x碰撞检测原理与英雄要打死怪物--之游戏开发《赵云要格斗》(7)

 这里是Evankaka的博客,欢迎大家前面讨论与交流------ 转载请注明出处http://blog.csdn.net/evankaka/article/details/42689689 本文将详细讲述cocos2dx中英雄与怪物的碰撞检测原理,其实就是精灵和精灵碰撞检测哈.本文主要从矩形碰撞入手,自己编写了一个矩形碰撞检测的函数,并且在游戏中来进行应用.另一方面,当英雄出动攻击后,如果英雄和怪物碰撞到的话,怪物就要掉血,并且当怪物血量为0时,怪物死亡,死亡之前它还会倒在地上闪烁几下.下面,

Cocos2d-x3.0游戏实例之《别救我》第十篇(完结)——用Json配置各类型怪物数据

现在我们有2种类型的怪物,而且创建的时候是写死在代码里的,这是要作死的节奏~ 所以,必须可配置,不然会累死人的. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址: http://www.benmutou.com/blog/archives/949  文章来源:笨木头与游戏开发 Json文件 什么是Json文件?说白了,它就是一个文本文档,只不过它的内容是按照一定的规则填写的. 于是,我们就可以按照那个规则去读取这份文档. 这,就是配置文件产生的缘由(才怪). (小若:才怪是什么意

cocos2d-html5 碰撞检測的几种方法

游戏中的碰撞还是比較多的,比方角色与角色的碰撞,角色与墙壁的碰撞,角色与怪物的碰撞等,都须要 进行碰撞的检測,来触发一定的事件 近期在尝试制作一个小游戏的时候须要用到碰撞检測,然后就查了下资料,并在论坛进行提问等算是找到了比較惬意的碰撞检測方法,这里记录下来 如今自己知道的方法算是有了三种了,以下一一记录并分析下他们各自的优缺点 1.就是官方提供的,依据getBoundingBox();方法获取要检測的碰撞物体的范围,然后再依据rectIntersectsRect();方法进行推断须要检測的两个

LeetCode668马在棋盘上的概率

已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 0 开始.即最左上角的格子记为 (0, 0),最右下角的记为 (N-1, N-1). 现有一个 "马"(也译作 "骑士")位于 (r, c) ,并打算进行 K 次移动. 如下图所示,国际象棋的 "马" 每一步先沿水平或垂直方向移动 2 个格子,然后向与之相垂直的方向再移动 1 个格子,共有 8 个可选的位置. class Solution(object): def knightProbab

亚马逊说仓库全机器人还要十年才能实现,现在还得需要人

也许没有哪家公司比亚马逊更能体现自动化技术带来的焦虑和希望了.说到自动化仓库,亚马逊早就走在诸多零售业同行的前面,但是要完全用机器替代人工,即使是在这件事上早早投入了十几年的亚马逊,也说未来还远得很. “人们常常误认为亚马逊很快就会实现完全自动物流中心,” 亚马逊机器人技术实施总监斯科特·安德森 (Scott Anderson)在陪同媒体参观亚马逊巴尔的摩运营中心时表示,“但是技术要达到这一点,至少还有十年的时间.” 安德森表示,从现在来看自动化技术还相当有限,并未达到亚马逊需要的水平. 从一堆

玛丽冒险

文件结构: marie.py 1 import pygame # 将pygame库导入到python程序中 2 from pygame.locals import * # 导入pygame中的常量 3 import sys # 导入系统模块 4 SCREENWIDTH = 822 # 窗口宽度 5 SCREENHEIGHT = 199 # 窗口高度 6 FPS = 30 # 更新画面的时间 7 8 9 # 定义一个移动地图类 10 class MyMap(): 11 12 def __init_

688马在棋盘上的概率

题目: 已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 0 开始.即最左上角的格子记为 (0, 0),最右下角的记为 (N-1, N-1),现有一个 “马”(也译作 “骑士”)位于 (r, c) ,并打算进行 K 次移动,如下图所示,国际象棋的 “马” 每一步先沿水平或垂直方向移动 2 个格子,然后向与之相垂直的方向再移动 1 个格子,共有 8 个可选的位置. 来源: https://leetcode-cn.com/problems/knight-probability-in-ches

Unity3D之碰撞体,刚体

一 概念介绍 刚体 Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力用来保证游戏对象像在真实世界中那样进行运动.任何游戏对象只有添加了刚体组件才能受到重力的影响,通过脚本为游戏对象添加的作用力以及通过NVIDIA物理引擎与其他的游戏对象发生互动的运算都需要游戏对象添加了刚体组件. 碰撞体 碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体