cocos2d-lua

创建工程

  1. 用cocos直接创建
    在这里插入图片描述
  2. cmd命令行创建
1.cd  C:\Cocos\Cocos2d-x\cocos2d-x-3.10\tools\cocos2d-console\bin
2.python cocos.py new 游戏名 -p ID号 -l lua -d 游戏路径

载入场景

--class("PlayScene",...)PlayScene自己定义的类名
local PlayScene = class("PlayScene", cc.load("mvc").ModuleBase)--继承类MoubleBase
PlayScene.RESOURCE_FILENAME = "game/Pork/PlayScene.csb"--载入cocos studio设置的场景 csb格式

读取cocos studio中场景控件

function PlayScene:onCreate()  
     self.button=self.mView["button"]
     --变量名 = self.mView["cocos sdudio中设置的控件名"]
end

require

  1. 加载指定的模块(类似#include),加载了该模块,那么就可已使用模块中的全局函数和全局数据
  2. require 用于搜索 Lua 文件的路径是存放在全局变量 package.path 中
  3. import() 与 require() 功能相同,但具有一定程度的自动化特性。
--直接 切换场景
require("logic.game.Pork.PlayScene"):create():showWithScene()
--读取这个路径下文件,并赋值给前面的变量 
local playscene = require("logic.game.Pork.PlayScene")
playScene.new:showWithScene()--切换
  1. 具体可见菜鸟教程 http://www.runoob.com/lua/lua-modules-packages.html

Lua中函数使用:

定义方式:

1.  tab.func=function ( 参数)
     end
2. function tab.func( 参数)
   end
3.  function tab:func( 参数) 
     end

调用方式:

  1. b.func(参数)
  2. tab:func(参数)

ps:调用方式可采用self:func()
如果用self.func() 会报错,正确用法self.func(self)

moveTo & moveBy

存在坐标pos1(x1,y1),pos2(x2,y2)
cc.MoveTo:由pos1移动到pos2
cc.MoveBy:终坐标pos3=pos1+pos2 (相对偏移向量)

进度条的属性

  1. left:setMidpoint(cc.p(0, 0))
    setMidpoint()函数是设置进度条的起始点
    (0,y)表示最左边
    (1,y)表示最右边
    (x,1)表示最上面
    (x,0)表示最下面
  2. right:setBarChangeRate(cc.p(1, 0))
    setBarChangeRate()函数是用来设置进度条动画方向的
    (1,0)表示横方向
    (0,1)表示纵方向
  3. 通过cocos studio中控件直接设置
self.loadingBar:setPercent(100-count)
  1. 具体可见 https://blog.csdn.net/tropicofcancer9/article/details/80018091
    https://www.2cto.com/kf/201407/317409.html

贝塞尔曲线 + 翻转

在这里插入图片描述

 local flipxAction = cc.FlipX:create(true)    
 --参数(时间,{起点,控制点、终点})
 local moveTo1 = cc.BezierTo:create(10, {cc.p(sprites:getPosition()), cc.p(spritePointS[1], spritePointS[2]), cc.p(spriteFinalS[1], spriteFinalS[2])})    
 local moveTo2 = cc.BezierTo:create(10, {cc.p(sprites:getPosition()), cc.p(spritePoint[1], spritePoint[2]), cc.p(spriteFinal[1], spriteFinal[2])})     
 local action = cc.Sequence:create(moveTo1, flipxAction,  moveTo2, flipxAction) 

画直线

local draw = cc.DrawNode:create()
:addTo(self)
draw:drawLine(cc.p(0,0),cc.p(1000,1000),cc.c4f(0,0,0,5))
--参数(起点,终点,线条颜色)

旋转

--以锚点为中心1s旋转360度
local run = cc.RotateBy:create(1,360)
local action = cc.RepeatForever:create(run)
self.sprite:runAction(action)

--停止所有动作
self.sprite:stopAllActions()

读取文件内容

function playScene:ReadScore(path)   
 --r 读取/ a 追加/ w 写/ b 打开二进制 /r+ 更新,之前所有数据将保存 / w+ 更新,之前所有数据将被清除 /a+ 文件末尾添加    
  	local file = io.open(path,"r")     
 	if file then        
 		local content = file:read("*a")        
 		io.close(file)        
 		return content    
 	end    
 	return 0 
 end

将内容写入文件

function playScene:WriteScore(path, content ,mode)    
	local file = io.open(path, mode)    
	if file then        
		if file:write(content) == nil then            
			return false        
		end        
		io.close(file)        
		return true    
	else         
		return false    
	end 
end

UserDefault (key-value)

local file  = cc.UserDefault:getInstance()
local a = file:getIntegerForKey("key")
print(a)
file:setIntegerForKey("key", value)
local a = file:getIntegerForKey("key")
print(a)

滑动条 (坑)

-- --滑动条的使用   控制音量 失败   
local function onChangedSlider(sender,eventType)  --回调函数  (滑块对象, 事件类型)    
	local slider = sender    
	if eventType == ccui.SliderEventType.percentChanged then  --滑块值改变事件  
		local percent = slider:getPercent()  --获取音量 
		audio.stopMusic()
		audio.setMusicVolume(0)  --?????????  
		print(percent)
	end   
end  
self.audioSlider:addEventListener(onChangedSlider)

计时器的使用

  1. 方法1(切换场景时存在一些问题)
local director = cc.Director:getInstance()
local function update(dt)
  ......
end    
director:getScheduler():scheduleScriptFunc(update,1,false) 
  1. 方法2(推荐)
function PlayScene:onCreate()   
    self:onUpdate(handler(self,self.update)) --刷新时间
    local count = 0
end

function PlayScene:update(dt)		
    count = count + dt
    print(count)
end

序列帧动画的播放

    self.fishgroup = cc.CSLoader:createNode("res/game/try/Node.csb")        
    :addTo(self)    
    local action   = cc.CSLoader:createTimeline("res/game/try/Node.csb")   
    self.fishgroup:runAction(action)    
    action:gotoFrameAndPlay(0,60,true)   --0-60帧  true循环

触摸事件

--触摸回调函数
local function onTouchBegan( touch, event )                
end
local function onTouchEnded( touch, event )       
end       
local function onTouchMoved(touch, event)       
end        
local listener1 = cc.EventListenerTouchOneByOne:create()  --创建单点触摸事件监听        
listener1:setSwallowTouches(false)  --是否向下传递        
--注册触摸事件
listener1:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )  
listener1:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )  
listener1:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )        
local eventDispatcher = self:getEventDispatcher()         
eventDispatcher:addEventListenerWithFixedPriority(listener1,-1) --分发监听事件        
self._listener = listener1

弹幕lua

https://blog.csdn.net/u011755031/article/details/50931089

遇到的问题

  1. 使用cocos studio创建ui时:
    路径发步与打包必须时res中,否则后续会导致很多错误,这步非常关键
  2. 关于世界坐标和本地坐标的转换失败的情况,暂时我也没弄懂,等我弄懂了就来补坑,目前我的解决方法是不要设置场景元素的父子节点,直接全都放在世界场景中。
  3. 瞬时动作和延时动作在刷新时间函数的时候可能会产生冲突,可用Sequence解决
local action = cc.Sequence:create(... , ...)
...:runAction(action)
  1. UserDefault数据未永久保存,可能是文档里面缺少root
    在这里插入图片描述
    在这里插入图片描述
发布了33 篇原创文章 · 获赞 2 · 访问量 6960

猜你喜欢

转载自blog.csdn.net/qq_42677329/article/details/88368490