用COCOS

阅读: 评论:0

用COCOS

用COCOS

第一天,先用cocos创建了一个tilemap,原来以为很简单的东西,也搞了好久,任何东西,不动手做 总是以为很容易,动手做起来,就复杂很多了。但愿我能坚持下去。
lua的文档比较难找,官方的wiki就有使用的示例,而demo里面也有使用的例子。可以借助demo里面的东西来学习。
终于用tiledmap创建了一个地图,并导入到项目中使用。
    wSprite("HelloWorld.png"):):addTo(self)


这种结构蛮奇怪的,看它的意义是用第一个的返回对象去调用函数,以前写lua并没有这种方式,估计是新的。
创建了一个layer之后,并没有显示,原来是没调用 mylayer:addTo(self)。
没有控制台调试是蛮不方便的。
还有在windows调试,每次都会把资源拷贝到模拟器的目录下面。
if not exist "$(LocalDebuggerWorkingDirectory)" mkdir "$(LocalDebuggerWorkingDirectory)" xcopy /Y /Q "$(OutDir)*.dll" "$(LocalDebuggerWorkingDirectory)" xcopy /Y /Q "$(ProjectDir)..Classeside-supportlang" "$(LocalDebuggerWorkingDirectory)" xcopy "$(ProjectDir)......res" "$(LocalDebuggerWorkingDirectory)res" /D /E /I /F /Y xcopy "$(ProjectDir)......src" "$(LocalDebuggerWorkingDirectory)src" /D /E /I /F /Y
在custom build step里面有上面5行,这就是每次rebuild之后拷贝那些文件执行的地方。细看了一下,有 资源 有 lua脚本 还有dll 还有语言 所以不要在working directory里面编辑lua脚本,会被覆盖的,我就踩过一次这坑。 必须单独建立一个目录来存放这些资源文件,然后debug的时候设置为工作目录就ok了,不用每次都拷贝好点

下一步是texture packer的问题,好像找不到破解版的,先用着免费版本吧。

今天看了火星救援,结局有一句话点名了我,就是 you just begin。开始了,解决一个又一个的问题,你就达成了。 那么问题来了。首先,制作一个地图,然后,我需要一个主角,能在地图上走。
现在有一张图,主角全部按规则排列上面,我要创建一个角色,用这个图做资源。然,怎么搞的呢。
话说,写一个界面容易,要创建一个游戏的结构还是不容易的,先从简单的做起吧。
第一步,创建一个类,来管理你的主角吧。
写了这么多年的python,突然被lua搞得有点头大,现在是想直接继承cocos里面的类,这个应该没什么问题。 ok,下一个目的,写一个类,继承CSprite。
先搞清楚怎么播放动画
    local sprite1 = cc.Sprite:create("res/101.png", cc.rect(0, 0, 41, 36))local s = cc.Director:getInstance():getWinSize()sprite1:setPosition( cc.p( (s.width/5)*1, (s.height/3)*1) )


先创建一个精灵
    local animFrames = {}for i = 1,3 do local frame = cc.SpriteFrame:create( "res/101.png", cc.rect((i-1)*46, 0, 32, 36) )animFrames[i] = frameend


创建一个动画,这里是3帧的帧动画,图片是我从网上down的,所以没有plist,我就用另外的函数创建。 当然plist是最好的,而且我这里没有cache
    local animation = cc.Animation:createWithSpriteFrames(animFrames, 0.3)sprite1:runAction(cc.RepeatForever:create(cc.Animate:create(animation)))layer:addChild(sprite1, 0, 0)



这里是用精灵播放动画。
下一步是把这个放到player的类里 ok,完工了
avatar.lua
local gamePlayer = class("Player", function()return cc.Sprite:create()
end)function gamePlayer:ctor()
endfunction gamePlayer:Walk()local s = cc.Director:getInstance():getWinSize()self:setPosition( cc.p( (s.width/5)*3, (s.height/3)*1) )local animFrames = {}for i = 1,3 do local frame = cc.SpriteFrame:create( "res/101.png", cc.rect((i-1)*46, 0, 32, 36) )animFrames[i] = frameendlocal animation = cc.Animation:createWithSpriteFrames(animFrames, 0.3)self:runAction(cc.RepeatForever:create(cc.Animate:create(animation)))
endreturn gamePlayer



用法如下
    local sprite2 = Avatar:create()layer:addChild(sprite2, 0, 0)sprite2:Walk()



当来是相当简单好用了呢,继承了Sprite,其实继承自Sprite是不是最好的呢,或者就一个空的类如何。 先这样吧,继续下一个结构。
下一步,我要把动画都都加上cache 为了更好的控制主角的动作,我加入了cache,和通过参数传递的动作,虽然和大型的游戏动作匹配之类的机制还相差比较远。 但是看起来也有那么回事了。 avatar.lua内容如下
local gamePlayer = class("Player", function()return cc.Sprite:create()
end)function gamePlayer:ctor()self:onCreate()
endfunction gamePlayer:onCreate()local cache = cc.SpriteFrameCache:getInstance()for i = 1,3 do local frame = cc.SpriteFrame:create( "res/101.png", cc.rect((i-1)*46, 0, 32, 36) )cache:addSpriteFrame(frame,string.format("walk_down_%d",i))endfor i = 1,3 do local frame = cc.SpriteFrame:create( "res/101.png", cc.rect((i-1)*46, 36, 32, 36) )cache:addSpriteFrame(frame,string.format("walk_right_%d",i))endfor i = 1,3 do local frame = cc.SpriteFrame:create( "res/101.png", cc.rect((i-1)*46, 72, 32, 36) )cache:addSpriteFrame(frame,string.format("walk_up_%d",i))end for i = 1,3 do local frame = cc.SpriteFrame:create( "res/101.png", cc.rect((i-1)*46, 108, 32, 36) )cache:addSpriteFrame(frame,string.format("walk_left_%d",i))end
endfunction gamePlayer:Walk(position)local cache = cc.SpriteFrameCache:getInstance()local s = cc.Director:getInstance():getWinSize()self:setPosition( cc.p( (s.width/5)*3, (s.height/3)*1) )local animFrames = {}for i = 1,3 do local frame = cache:getSpriteFrame(string.format("walk_%s_%d",position,i))animFrames[i] = frameendlocal animation = cc.Animation:createWithSpriteFrames(animFrames, 0.3)self:runAction(cc.RepeatForever:create(cc.Animate:create(animation)))
endreturn gamePlayer


------------------------- 这不是大型rpg游戏,只是一个小demo,至于机制,结构之类的东西,我会在后面慢慢完善。 那么下一个问题是什么? 角色有了,动作有了,需要在地图上行走,那么,我的地图是随机的呢,还是固定的地图? 随机生成的地图更有挑战性,我觉得这是必须的。战斗场景,怪物? 此外还有npc角色,怪物,之类的,但是路遥一步一步走。

本文发布于:2024-01-31 23:47:18,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170671604032272.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:COCOS
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23