如何使用cocos2d制作类似DNF的2D横版格斗过关单机游戏游戏 PART-1

Pages: 1/26
主题 : 手把手教你学会使用Quick-Cocos2d-x制作横版过关游戏【上课中!!~】
UID: 98590
发帖: 2604
可可豆: 14535 CB
威望: 7673 点
在线时间: 8539(时)
发自: Web Page
来源于&&分类
手把手教你学会使用Quick-Cocos2d-x制作横版过关游戏【上课中!!~】&&&
本帖被 阿花君霸占路人 执行取消置顶操作()
学习Cocos引擎最快的方法就是跟着教程一步步学习实践,最终完成教程演示的demo,你在学习过程中是否遇到过问题和障碍呢?为了让你的学习之路更加顺畅,我们社区特别组织了系列教程在线学习活动:第一期就由Cocos引擎教程组的王帅(社区id :)给大家带来系列教程,并提供相应教学指导。本教程共六讲,每讲1-2个小时,每周二发一讲教程,每周四下午2点-4点本教程撰写者会进行教程专项答疑,大家有问题可以直接在本帖中以回帖形式发布~到时候英俊神勇的王老师会一一回答哦~~~希望学习本教程的同学,在学习之后把完成的游戏源码和截图发布到本帖中,王帅老师会对所有的作品进行点评,有创新的、优秀的作品发布者将可获得Cocos2d-x纪念T恤一件! 引用 教程名称:使用Quick-Cocos2d-x制作横版过关游戏教程目标:从零开始讲解使用Quick-Cocos2d-x制作游戏的步骤。基本上覆盖了所有的基本知识点,在跟随教程的学习完成后,能够使用Quick-Cocos2d-x制作自己的游戏,能够掌握Quick-Cocos2d-x的基本上所有的常用方法和类。对于从未制作过游戏的开发人员,能够熟悉游戏开发中的常用技能和基本概念。学习要求:有一定编程基础,懂Lua语言,懂基本的2dx运用资源包地址:进度安排:课程内容学习时间建议第一讲:1-2小时第二讲:1-2小时第三讲:2小时第四讲:2小时第五讲:2小时第六讲:2小时本期奖品:
点击上面列表中已发布的教程,马上开始愉快的学习之旅吧!!!
如果大家对于CocoaChina有任何意见或者建议可以发邮件到:
UID: 98590
发帖: 2604
可可豆: 14535 CB
威望: 7673 点
在线时间: 8539(时)
发自: Web Page
7月31日下午2--4点答疑笔记!!!!!!!!引用 引用第19楼wei_bj于 14:17发表的  :function MainScene:addTouchLayer()    local function onTouch(eventName, x, y)        if eventName == &began& then            self.player:walkTo({x=x,y=y})        end    endeventname什么情况下会是 began ?代码中没有交代 这个是触摸的事件,比如你手指按下,手指滑动或者抬起,都会有事件下发 引用 引用第20楼wei_bj于 14:19发表的  :此外,能否对“CCNode的对象都能够接收触摸事件”做举例说明,或是提供文档或是相关学习的源代码?这个的意思就是只要你的类是从CCNode继承下来的,那么就可以通过addNodeEventListener(cc.NODE_TOUCH_EVENT的方式来注册触摸事件 引用 引用第37楼pk14-07-29 21:29发表的  :加入素材了,但是还是显示这个...用Sprite#没有问题.这个是因为动画没找到图片,生成不了,Quick里面加#的话表示从Cache里面读图片,没有#的话表示从文件读 引用 引用第44楼qq于 18:00发表的  :求cc命名空间下的api文档api文档找廖大要,其实在Quick引擎的docs目录下面是有api文档的引用 引用第54楼pk14-07-31 11:20发表的&&:老师,我有一个问题,代码中self.sprite和local sprite这两者有什么区别吗??我看你的代码中有类似的代码,看的稀里糊涂,不是很明白self.xxx类似与c++中类的成员变量,local 表示局部变量,可以看下lua的书 引用 引用第53楼pk14-07-31 09:00发表的&&:我有很多个文件上下左右不同的文件,这样全塞进一个Frames里面还是左右分开来放? 这个可以看你具体的需要 引用 引用第63楼pk14-07-31 14:24发表的  :newSprite一个image之后,我想要在之后比如玩家进入一个场景回来之后,把这个新的图片更改成另外一张图片,不同函数块要怎么修改., local frame = CCSpriteFrameCache:sharedSpriteFrameCache():spriteFrameByName(&player1-2-4.png&);    self:setDisplayFrame(frame);引用 引用第73楼爱吃鱼的喵喵于 14:58发表的  :老师,骨骼动画在quick里面是怎么用的,还有spine怎么是收费的,有没替代的工具使用呢。骨骼动画的话你可以看下Quick的samples里的dragonbones,至于骨骼动画目前cocostudio,dragonbones,spine都可以用引用 引用第76楼爱吃鱼的喵喵于 15:08发表的  :老师,在横版游戏里面,很多在线玩家都在同一个场景,切换进入下一个地图的时候,使用的是另一个Scene,请问下场景里面的玩家对象是不是不用清除,切换另一个Scene的时候,自动销毁上一个Scene的显示对象的吗?这个问题涉及到两方面的问题,一个是CCDirector里的场景切换,你可以看下CCDirector.h里面有关scene的几个方法:runWithScene()、pushScene()、popScene()、replaceScene()几个方法;第二个问题是内存管理机制的问题,现在的内存管理是通过parent和child来进行,如果parent node被释放的话,child node也是会被释放的引用 引用第79楼pk14-07-31 15:26发表的  :我想问一下,我这个场景中的所有图片在切换场景后会自动清除还是要手动.我看API貌似要手动,可是我场景中的图片好多,真的要一个个加入吗?我用640*1140作为分辨率建立了一张图片,放在Quick中,在低于640或高于640太多的分辨率下测试左右有黑边.可以用代码补掉么?怎么补?1.图片资源是在Cache里的,你说的是精灵那些么?那些你如果是通过addChild添加的话,replaceScene会把前一个Scene的东西释放掉2.你这个问题是分辨率适配的问题,你如果是用宽度适配的话,在低于或高于640分辨率的话是会自动适应屏幕宽度的,但是高度就会等比例的进行缩放
如果大家对于CocoaChina有任何意见或者建议可以发邮件到:
发帖: 1071
可可豆: 124079 CB
威望: 126080 点
在线时间: 2533(时)
发自: Web Page
沙发。。。。
图文唐诗三百首,图文国学合集汉语词典速查版:最新现代汉语词典 新华字典 成语词典大全-中文好助手
级别: 精灵王
UID: 113399
发帖: 3619
可可豆: 5707 CB
威望: 6226 点
在线时间: 2594(时)
发自: Web Page
前排 只能围观
级别: 风云使者
UID: 78198
发帖: 3543
可可豆: 3376 CB
威望: 13237 点
在线时间: 4900(时)
发自: Web Page
微信whglyy
级别: 新手上路
UID: 326259
可可豆: 77 CB
威望: 48 点
在线时间: 59(时)
发自: Web Page
支持,强烈支持教程
级别: 新手上路
可可豆: 90 CB
威望: 70 点
在线时间: 96(时)
发自: Web Page
前排刷存在~
级别: 精灵王
可可豆: 3285 CB
威望: 3285 点
在线时间: 1891(时)
发自: Web Page
级别: 新手上路
可可豆: 57 CB
威望: 57 点
在线时间: 152(时)
发自: Web Page
这是大量新手的福利啊
级别: 骑士
UID: 316527
可可豆: 692 CB
威望: 558 点
在线时间: 353(时)
发自: Web Page
Pages: 1/26
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版&>&&>&&>&&>&如何制作一个横版格斗过关游戏 Cocos2d-x 2.1.4
如何制作一个横版格斗过关游戏 Cocos2d-x 2.1.4
上传大小:21.32MB
有关如何制作一个地下城勇士的格斗过关游戏,若在mac使用cocos2d-x的网友,不妨下载玩下。
综合评分:4.1(8位用户评分)
所需积分:0
下载次数:99
审核通过送C币
创建者:nigelyq
创建者:liuyujie0514
课程推荐相关知识库
上传者其他资源上传者专辑
移动开发热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
如何制作一个横版格斗过关游戏 Cocos2d-x 2.1.4
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:&&&&利用cocos2d编写的一款很棒的横板RPG打怪过关游戏!究竟有多棒,看看截图和视频吧。不过,小编还是希望你能亲自下载代码来试试。
&&&&作者说:这个游戏源码做进去了很多功能,非常适合刚刚学习的朋友们下载下来学习哦。里边的美术资源是用工具取的其它成熟项目里边的,所以只作为学习交流。之所以共享出来,有一部分原因是想找份coco2d工作, 要是哪个公司觉得我可以被培养请与我联系啊。
&&&&小编注:十分十分感谢开发者@岁月吹落一地唯美 能无私发布这份代码于Code4App!各位游戏公司的HR,你们看到上面的联系方式了吗:)另外,无论你多么缺钱,千万别把这份代码直接扔到app store发布啊,这是可耻的行为。
测试环境:
&&[Code4App]编译测试
相关代码:
(13466次查看,5355次下载) cocos2d-x 2.2.3实现的RPG游戏,目前只部署了ios平台。踩地雷式遇敌,半即时战斗系统,战斗菜单分为攻击、技能、道具、逃跑。编译时需要将本游戏的目录复制到cocos2d-x-2.2.3/projects/。
(22720次查看,35205次下载) 利用 cocos2d 制作的一个RPG回合制战斗游戏,包括人物在有障碍物的瓷砖地图中走动、回合制战斗场面,技能效果、抽奖效果。
(14446次查看,6854次下载) 利用cocos2d-iPhone制作了恶魔城游戏Demo。只有4个场景,1个怪,打一下就死(即没有血的概念)。游戏操作比较复杂,在测试玩之前,一定要看游戏的操作说明(进入菜单选项里面,点击最后一项)。
(15420次查看,9684次下载) 一款类似愤怒的小鸟的游戏,用的是cocos2d-x最新版本2.0.3编写,采用的是Box2D物理引擎。从这款游戏中你可以学到:怎么用旋转关节,怎么用连接关节,怎么让视角跟随抛射物,游戏还不是很完整,大家可以根据自己的爱好完善它。
(11289次查看,3120次下载) 利用cocos2d制作的一款类塔防游戏。游戏规则是本方城堡和敌方城堡互相开炮射击,可以修建城堡以及买大炮。有几个比较不错的实现,可以供开发者学习一下:炮弹射出的烟雾效果,堡垒被击中的坍塌效果,以及旋转屏幕的伪3D效果等等。
(24087次查看,14679次下载) 利用 cocos2d 模仿合金弹头的特种任务做的一个demo,包括几个场景,可以发射子弹、跳跃和前进。
(24562次查看,6019次下载) 利用 cocos2d 制作切水果游戏。
(43206次查看,28918次下载) cocos2d 高仿捕鱼达人。
代码评论:
登录后方可评论
好厉害。。。
登录后方可评论
提个不情之请,能不能发一份人物角色的动画素材给我,做毕设找不到合适的素材。如果可以的话麻烦发到我邮箱,谢谢了
登录后方可评论
我在正在用cocos2d-x 重写,代码结构全重新弄,弄完开源,通知博主
登录后方可评论
我下载的代码它的zip文件的格式一直是错误的,里面的图是空白的,请问可以重新发一份到我的邮箱。。谢谢你了。。
登录后方可评论
正把它转成cocos2d-x版本,你的游戏在第二关的某个位置会崩掉
登录后方可评论
代码质量不太好,确实适合新手学习哈
登录后方可评论
跑动中总是会出现一下站立的动作,请问如何解决?也就是两次跑动动作执行的中间会出现一次站立的动作。
登录后方可评论
为什么我下载下来,解压有问题
登录后方可评论
东西很赞哦,顺道问一下,你的素材都是在哪弄的呀?
登录后方可评论
虚拟机是不是不能用啊.
\'Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES\'
登录后方可评论
怎么不支持iphone5真机调试?
登录后方可评论
你好,我刚才重新弄了一下,是我解压缩的软件有问题,中文的文件夹显示乱码,导致找不到资源文件。
登录后方可评论
缺少资源文件。
登录后方可评论
用真机调试(null): error: CFBundleIdentifier \'com.iPhone Developer.SequenceDiagram\' contains illegal character \' \' invalid bundle identifier \'com.iPhone Developer.SequenceDiagram\'出线这种错误,签名我是改了的
登录后方可评论
有没有此代码的
学习流程啊
写一个教程呗
登录后方可评论
特别说明下:如果使用4.6的模拟器的朋友 请把RootViewController.m中的48~51行代码取注即可。原因是这几行代码是为使用4.6而准备的。使用4.6以下的请注掉它,现在我有更好的办法,但忘了更新原来的拉 ,还请各位多多包含拉。
登录后方可评论
怎么缺少很多图片资源啊?
登录后方可评论
-控件分类-
-功能分类-cocos2d-x视频教程之横版过关游戏--第一讲_土豆_高清视频在线观看【官方教程】使用Quick-Cocos2d-x搭建一个横版过关游戏(五) - 推酷
【官方教程】使用Quick-Cocos2d-x搭建一个横版过关游戏(五)
原创: 王帅
目录索引:
在上一章中我们讲到了怎么在游戏中添加血量条等元素,接下来我们来学下怎么在Quick中使用物理引擎。
Quick中使用的物理引擎
在Quick中通过CCPhysicsWorld类来使用物理引擎Box2D和Chipmunk(目前仅支持Chipmunk)。至于Box2D和Chipmunk的优劣问题,在这里我就不比较了,敢兴趣的同学可以自己度娘。因为Quick目前只支持Chipmunk,所以大家也不用想太多了。
CCPhysicsWorld接口
关于CCPhysicsWorld类使用,大家可以打开Quick里面的Smaples下的physics,里面有一个简单的物理引擎的使用例子。打开文件
lib/cocos2d-x/external/chipmunk/cocos2dx_support
下的CCPhysicsWorld.h文件,里面包含了CCPhysicsWorld类的所有定义。我们在Lua里使用时只需要直接调用里面的接口就可以了。在Quick的physics例子中创建一个PhysicsWorld是这样写的:
-- create physics world
self.world = CCPhysicsWorld:create(0, GRAVITY)
-- add world to scene
self:addChild(self.world)
通过调用CCPhysicsWorld:create可以创建一个物理世界,create的两个参数分别为x轴上和y轴上的重力因子。当为负数时表示往左方或者是下方运动,当为正数时表示往右方或者上方运动,绝对值的数值越大,重力加速度越大。用过Chipmunk的同学知道,Chipmunk里有几种Body的类型。
圆形 通过调用
createCircleBody
来创建一个圆形的Body
矩形 通过调用
createBoxBody
来创建一个矩形的Body
多边形 通过调用
createPolygonBody
来创建一个多边形的Body
用法如下:
-- 创建一个矩形碰撞区域
local leftWallBody = self.world:createBoxBody(0, WALL_THICKNESS, display.height)
-- 创建一个圆形碰撞区域
local coinBody = self.world:createCircleBody(COIN_MASS, COIN_RADIUS)
createXXXBody
创建出来的Body要通过bind方法绑定到精灵上。为了更好的模拟物理环境,也可以通过以下接口来设置一些系数:
body:setFriction(friction) 摩擦系数 0-1.0
body:setElasticity(elasticity) 反弹系数 0-1.0
body:setIsSensor(isSensor) 是否可以感应
body:setVelocity(velocityX, velocityY) 速度
body:setAngleVelocity(velocity) 角速度
比如你的物体从一个斜坡上下滑时,你可以设置一个摩擦系数;如果你的物体是从高处掉落,那么你可以给他设置一个反弹系数。这些参数设置能够更真实的反应物理世界里的一些物理特性。
创建Body时需要注意的是函数的第一个参数,当mass的值&=0时表示是静态刚体,当mass的值大于0表示是普通刚体。
CCPhysicsWorld碰撞检测
在Quick中增加碰撞检测,有这么几个步骤:
body:setIsSensor(true): 设置能感应Body
body:setCollisionType(碰撞类型): 设置Body的碰撞类型,这个参数当有不同的刚体时,必须要设置不同的整型值。
world:addCollisionScriptListener(事件响应函数,碰撞类型1,碰撞类型2): 碰撞类型1和碰撞类型2,是你想要检测的碰撞发生的两个物体。
比如我们现在有两个物体,分别为类型1和类型2,我们可以这样写:
world:addCollisionScriptListener(handler(self, self.onCollision), 1, 2)
function ClassA:onCollision(eventType, event)
if eventType == 'begin' then
elseif eventType == 'preSolve' then
elseif eventType == 'postSolve' then
elseif eventType == 'separate' then
碰撞响应函数会传入两个参数,一个为eventType,有下面几种可能的值:
: 碰撞开始
: 持续碰撞(相交),可以设置相交时独自的摩擦,弹力等
: 调用完preSolve后,做后期处理,比如计算破坏等等
: 分开,当删除一个shape时也会调用
通过这几个事件,能够对物体之间的碰撞做出及时的反应。
在游戏中添加碰撞
给游戏添加元素
为了更好的添加效果,我们还要给玩家角色和敌人对象添加被击中的效果,并且在被击中后用户要掉一部分血。怎么添加在前面的章节中已经讲解过,我们就不细说了,不明白的可以参看
添加碰撞代码
首先,我们先创建一个CCPhysicsWorld对象,为了方便管理,我们新建了一个类PhysicsManager, 代码如下:
local world = nil
local PhysicsManager = class(&PhysicsManager&, function()
return CCPhysicsWorld:create(0, 0)
CollisionType = {}
CollisionType.kCollisionTypePlayer = 1
CollisionType.kCollisionTypeEnemy = 2
function PhysicsManager:getInstance()
if world == nil then
world = PhysicsManager.new()
return world
return PhysicsManager
这样就创建了一个PhysicsManager的单例对象。
接下来,我们再在每个玩家和敌人对象中添加碰撞的刚体,比如,我们在玩家对象中添加如下语句:
local world = PhysicsManager:getInstance()
self.body = world:createBoxBody(1, self:getContentSize().width/2,
self:getContentSize().height)
self.body:bind(self)
self.body:setCollisionType(CollisionType.kCollisionTypePlayer)
self.body:setIsSensor(true)
self:scheduleUpdate();
self:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT, function()
self.body:setPosition(self:getPosition()) end)
这样就给Player添加了一个大小为Player的1/2宽度,高度为Player的高度的矩形刚体。这里要注意的是被注释掉的
self.body:bind(self)
Quick是更新body和精灵坐标的方式有两种,一种是通过将精灵绑定到body上,然后移动body;还有一种是通过移动精灵,在精灵内通过update来更新body的坐标。我们这游戏里采用了第二种方式。
在添加完碰撞检测后,我们再回到MainScene中,在MainScene:ctor中添加如下代码:
-- 获取world并且添加到Scene中
local world = PhysicsManager:getInstance()
self:addChild(world)
-- 启动世界更新
world:start()
-- 显示物理引擎调试层
self.worldDebug = world:createDebugNode()
self:addChild(self.worldDebug)
-- 添加碰撞检测函数
world:addCollisionScriptListener(handler(self, self.onCollision) ,
CollisionType.kCollisionTypePlayer, CollisionType.kCollisionTypeEnemy)
为了在碰撞时检测事件,我们添加MainScene:onCollision函数:
function MainScene:onCollision(eventType, event)
if eventType == 'begin' then
self.canAttack = true
local body1 = event:getBody1()
local body2 = event:getBody2()
if body1:getCollisionType() == CollisionType.kCollisionTypePlayer and body2 then
body2.isCanAttack = true
elseif eventType == 'separate' then
self.canAttack = false
local body1 = event:getBody1()
local body2 = event:getBody2()
if body1:getCollisionType() == CollisionType.kCollisionTypePlayer and body2 then
body2.isCanAttack = false
这里添加个isCanAttack,这个是为了在接触时表示玩家可以砍敌人了,离开以后玩家是不能砍敌人的。我们稍微更改下MainScene:clickEnemy函数:
function MainScene:clickEnemy(enemy)
if self.canAttack then
if self.player:getState() ~= &attack& then
self.player:doEvent(&clickEnemy&)
print(&enemy:canAttack & .. tostring(enemy:getCanAttack()))
if enemy:getCanAttack() and enemy:getState() ~= 'hit' then
enemy:doEvent(&beHit&, {attack = self.player.attack})
local x,y = self.player:getPosition()
self.player:walkTo({x=x, y=y})
if self.player:getState() ~= 'walk' then
self.player:doEvent(&clickScreen&)
这样一来,只有在碰撞时,玩家才能砍敌人。当然现在的敌人是不会动的,怎么解决敌人动的问题,就看大家的智慧了。嘿嘿!
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致}

我要回帖

更多关于 横版格斗网络游戏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信