-- for CCLuaEngine traceback
function __G__TRACKBACK__(msg)
print("----------------------------------------")
print("LUA ERROR: " .. tostring(msg) .. "\n")
print(debug.traceback())
print("----------------------------------------")
end
local function main()
-----------------------------------------------------------------
-- avoid memory leak
collectgarbage("setpause", 100)
collectgarbage("setstepmul", 5000)
--[[-------------------------------------------------------------
补充说明:
collectgrabage(opt [, arg])
功能:垃圾收集器的通用接口,用于操作垃圾收集器
参数:
opt--操作方法标志
"stop" : 停止垃圾收集器
"restart" : 重启垃圾收集器
"collect" : 执行一次全垃圾收集循环
"count" : 返回当前Lua中使用的内存量(以KB为单位)
"step" : 单步执行一个垃圾收集.步长"size"由参数arg指定.如果完成一次收集循环,将返回True
"setpause" : 设置arg/100的值作为暂定收集的时长
"setstepmul" : 设置arg/100的值,作为步长的增幅(即新步长 = 旧步长*(arg/100))
--]]-------------------------------------------------------------
-----------------------------------------------------------------
--自定义打印函数,将字符串打印出来
--其实这里可以调用CCLuaLog函数来打印字符串
local cclog = function(...)
print(string.format(...))
end
-----------------------------------------------------------------
-----------------------------------------------------------------
--包含hello2这个脚本,该脚本定义了myadd(x, y)函数
require "hello2"
cclog("result is " .. myadd(3, 5))
-----------------------------------------------------------------
-----------------------------------------------------------------
--获取可视区域
local visibleSize = CCDirector:sharedDirector():getVisibleSize()
--获取可是区域的原点坐标,OpenGL坐标系 左下角为原点
local origin = CCDirector:sharedDirector():getVisibleOrigin()
-----------------------------------------------------------------
-- add the moving dog
local function creatDog()
--dog.png的规格是 210*95, 由两个frame组成规格皆为105*95
local frameWidth = 105
local frameHeight = 95
-- create dog animate
local textureDog = CCTextureCache:sharedTextureCache():addImage("dog.png")
--rect用于捕捉textureDog的纹理并赋给frame0
local rect = CCRectMake(0, 0, frameWidth, frameHeight)
local frame0 = CCSpriteFrame:createWithTexture(textureDog, rect)
--rect用于捕捉textureDog的纹理并赋给frame1
rect = CCRectMake(frameWidth, 0, frameWidth, frameHeight)
local frame1 = CCSpriteFrame:createWithTexture(textureDog, rect)
--创建松鼠精灵
local spriteDog = CCSprite:createWithSpriteFrame(frame0)
spriteDog.isPaused = false
spriteDog:setPosition(origin.x, origin.y + visibleSize.height / 4 * 3)
--接下来的代码是要创建一个CCAction对象,让spriteDog来run这个CCAction对象
--步骤如下:
--1.使用数组animFrames保存序列帧
--2.利用该数组创建一个CCAnimation对象
--3.利用CCAnimation对象创建CCAnimate对象
--4.利用CCAnimate对象创建CCAction对象
--5.run这个CCAction
local animFrames = CCArray:create()
animFrames:addObject(frame0)
animFrames:addObject(frame1)
local animation = CCAnimation:createWithSpriteFrames(animFrames, 0.5)
local animate = CCAnimate:create(animation);
spriteDog:runAction(CCRepeatForever:create(animate))
-----------------------------------------------------------------
-- moving dog at every frame
local function tick()
--如果暂停了,那么返回,不对spriteDog做任何操作
if spriteDog.isPaused then return end
--根据spriteDog的当前position来判断下一个position
local x, y = spriteDog:getPosition()
if x > origin.x + visibleSize.width then
x = origin.x
else
x = x + 1
end
--更新位置
spriteDog:setPositionX(x)
end
--设置每帧调用trick函数
CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(tick, 0, false)
return spriteDog
end
-- create farm
local function createLayerFarm()
local layerFarm = CCLayer:create()
-- add in farm background
local bg = CCSprite:create("farm.jpg")
bg:setPosition(origin.x + visibleSize.width / 2 + 80, origin.y + visibleSize.height / 2)
layerFarm:addChild(bg)
-- add land sprite
for i = 0, 3 do
for j = 0, 1 do
local spriteLand = CCSprite:create("land.png")
spriteLand:setPosition(200 + j * 180 - i % 2 * 90, 10 + i * 95 / 2)
layerFarm:addChild(spriteLand)
end
end
-- add crop
local frameCrop = CCSpriteFrame:create("crop.png", CCRectMake(0, 0, 105, 95))
for i = 0, 3 do
for j = 0, 1 do
local spriteCrop = CCSprite:createWithSpriteFrame(frameCrop);
spriteCrop:setPosition(10 + 200 + j * 180 - i % 2 * 90, 30 + 10 + i * 95 / 2)
layerFarm:addChild(spriteCrop)
end
end
-- add moving dog
local spriteDog = creatDog()
layerFarm:addChild(spriteDog)
-- handing touch events
local touchBeginPoint = nil
--触摸开始
local function onTouchBegan(x, y)
cclog("onTouchBegan: %0.2f, %0.2f", x, y)
touchBeginPoint = {x = x, y = y}
spriteDog.isPaused = true
-- CCTOUCHBEGAN event must return true
return true
end
--触摸移动
local function onTouchMoved(x, y)
cclog("onTouchMoved: %0.2f, %0.2f", x, y)
if touchBeginPoint then
local cx, cy = layerFarm:getPosition()
layerFarm:setPosition(cx + x - touchBeginPoint.x,
cy + y - touchBeginPoint.y)
touchBeginPoint = {x = x, y = y}
end
end
--触摸结束
local function onTouchEnded(x, y)
cclog("onTouchEnded: %0.2f, %0.2f", x, y)
touchBeginPoint = nil
spriteDog.isPaused = false
end
--触屏事件获得eventType:began/moved/ended
local function onTouch(eventType, x, y)
if eventType == "began" then
return onTouchBegan(x, y)
elseif eventType == "moved" then
return onTouchMoved(x, y)
else
return onTouchEnded(x, y)
end
end
--注册Targeted触屏事件
layerFarm:registerScriptTouchHandler(onTouch)
layerFarm:setTouchEnabled(true)
return layerFarm
end
-- create menu
local function createLayerMenu()
local layerMenu = CCLayer:create()
local menuPopup, menuTools, effectID
local function menuCallbackClosePopup()
-- stop test sound effect
SimpleAudioEngine:sharedEngine():stopEffect(effectID)
menuPopup:setVisible(false)
end
local function menuCallbackOpenPopup()
-- loop test sound effect
local effectPath = CCFileUtils:sharedFileUtils():fullPathForFilename("effect1.wav")
effectID = SimpleAudioEngine:sharedEngine():playEffect(effectPath)
menuPopup:setVisible(true)
end
-- add a popup menu
local menuPopupItem = CCMenuItemImage:create("menu2.png", "menu2.png")
menuPopupItem:setPosition(0, 0)
menuPopupItem:registerScriptTapHandler(menuCallbackClosePopup)
menuPopup = CCMenu:createWithItem(menuPopupItem)
menuPopup:setPosition(origin.x + visibleSize.width / 2, origin.y + visibleSize.height / 2)
menuPopup:setVisible(false)
layerMenu:addChild(menuPopup)
-- add the left-bottom "tools" menu to invoke menuPopup
local menuToolsItem = CCMenuItemImage:create("menu1.png", "menu1.png")
menuToolsItem:setPosition(0, 0)
menuToolsItem:registerScriptTapHandler(menuCallbackOpenPopup)
menuTools = CCMenu:createWithItem(menuToolsItem)
local itemWidth = menuToolsItem:getContentSize().width
local itemHeight = menuToolsItem:getContentSize().height
menuTools:setPosition(origin.x + itemWidth/2, origin.y + itemHeight/2)
layerMenu:addChild(menuTools)
return layerMenu
end
-- play background music, preload effect
-- uncomment below for the BlackBerry version
-- local bgMusicPath = CCFileUtils:sharedFileUtils():fullPathForFilename("background.ogg")
local bgMusicPath = CCFileUtils:sharedFileUtils():fullPathForFilename("background.mp3")
SimpleAudioEngine:sharedEngine():playBackgroundMusic(bgMusicPath, true)
local effectPath = CCFileUtils:sharedFileUtils():fullPathForFilename("effect1.wav")
SimpleAudioEngine:sharedEngine():preloadEffect(effectPath)
-- run
local sceneGame = CCScene:create()
sceneGame:addChild(createLayerFarm())
sceneGame:addChild(createLayerMenu())
CCDirector:sharedDirector():runWithScene(sceneGame)
end
xpcall(main, __G__TRACKBACK__)
相关推荐
tft_espi 中文字体及自定义字体制作(tft.eSPI模块)
tft.eSPI库自定义字体方法 先下载 processing 然后安装到mixly安装目录下找到tft_eSPI文件夹。
cocos2d-lua自学笔记(纯属个人想法,不当之处请见谅)
UIListView(列表视图控件): UIListView是UIScrollView的扩展,创建一个列表视图具体步骤: 1.创建列表视图;2.创建列表视图项 两者有区别,通俗来说,第一步是创建一个框框,第二步则是在框框中添加具体的条目 创建视图: local list=cc.ui.UIListView.new(params) --params参数的意思,可以创建一个列表视图也就是框框
Linux中断子系统(二)—— 通用框架处理
1、数据结构分析 (1)中断描述符结构structirq_desc: 1)打开CONFIG_SPARSE_IRQ宏(中断编号不连续),中断描述符以radix- tree来组织,用户在初始化时进行动态分配,然后再插入radix-tree中; 2)关闭CONFIG_SPARSE_IRQ宏(中断编号连续),中断描述符以数组的 形式组织,并且已经分配好; 3)不管哪种形式,最终都可以通过linuxirq号来找到对应的中断描述符; (2)stru...
cocos2dx+lua学习笔记:事件派发器CCEventDispatcher
cocos2dx内关于事件监听和派发的调度器EventDispatcher相关内容
Intel AX系列网卡5G热点开启失败?Linux下3种修复方案实测(含Ubuntu/OpenWRT)
本文针对Intel AX系列网卡在Linux系统下无法开启5G热点的常见问题,深入剖析了其根源在于内核LAR机制与驱动的兼容性。文章提供了三种实测有效的修复方案:针对内核低于5.5的模块参数法、适用于高内核版本的hostapd补丁编译法以及高阶的驱动修改法,帮助用户在Ubuntu、OpenWRT等环境中成功启用5G热点功能。
通信原理 | 随机数仿真 | 均匀、正态、双高斯、瑞利、莱斯、对数正态、nakagami、Suzuki分布的随机数仿真(matlab)
信道建模在通信系统设计和分析中扮演着至关重要的角色。它指的是使用数学和物理模型来描述和模拟无线或有线通信路径中的信号传播特性。
cocos2d-lua学习笔记1
从上一篇搭建好了cocos2d-lua环境,迫不及待的尝试一下,下面是学习的时候的代码 local MainScene = class("MainScene", cc.load("mvc").ViewBase) function MainScene:onCreate() -- add background image display.newSprite("Hel
DFI协议时序
参数名称典型值应用场景关键影响tcmd_lat1-2个时钟周期命令与地址锁存同步地址错误风险tphy_wrlat1-2个时钟周期写操作响应速度写带宽与延迟2-3个时钟周期写操作端到端延迟系统吞吐量1-2个时钟周期连续写命令间隔信号干扰与资源冲突tphy_rdlat1-2个时钟周期读操作响应速度读带宽与延迟trddata_en由CL决定(如0.41 ns)读数据返回时间系统延迟10-20 ps写数据与命令对齐数据丢失风险<1 µs低功耗模式切换。
cocos2d-x 3.7.1 lua 笔记
display.newSprite(“#xxx.png”) 带#号表示从framecache里面取图,不带则从本地文件读取。 为layer添加触摸事件 local touchLayer = display.newLayer() touchLayer:onTouch(handler(self, self.onTouch)) 事件处理,移除事件 function xxx:onTouc
基于 STM32 的全自动洗车监控系统设计与实现
本文提出一种基于 STM32F103RCT6 芯片的全自动洗车监控系统方案,通过多传感器融合与智能控制算法,实现车辆检测、洗车流程自动化及状态远程监控。系统集成硬件选型、电路设计、软件流程及通信功能,可广泛应用于智能洗车场景。
第14.10章 高翔博士最新开源框架Lightning-LM源码解读(十):在线定位run_loc_online涉及到的核心模块总结
本文对Lightning-LM激光SLAM定位框架进行了全面剖析。该框架是一个轻量高效的激光雷达建图与定位系统,支持3D SLAM、动态图层管理等功能。文章首先介绍了项目概况和源码结构,包括核心模块如定位系统(loc_system)、激光匹配(lidar_loc)和位姿图优化(pose_graph)等。接着详细解析了各模块的关键函数和运行流程,如数据接收处理、NDT匹配和位姿优化等。最后总结了学习该框架所需的C++知识要点,包括智能指针、多线程编程等现代C++特性。该分析为SLAM开发者提供了实用的架构参考
TRACKBACK
function __G__TRACKBACK__(msg) --引用通知,全局变量 跟踪绑定执行函数发生错误的信息并输出 print("------------------------") print("LUA ERROR: " .. tostring(msg) .. "\n") -- 字符串连接(打印出消息) print(debug.traceback()) End
【深度学习|多实例学习】多实例学习(Multiple Instance Learning, MIL)的起源、发展和应用,附代码(一)
【深度学习|多实例学习】多实例学习(Multiple Instance Learning, MIL)的起源、发展和应用,附代码(一)
Cocos2d-x HelloLua 介绍
猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢!原文地址: http://www.cocos2dev.com/?p=393最近网游使用lua做更新比较火,最近也有人问我能否写下lua的文章。刚新建了一个lua工程,看了下代码,就干脆先介绍下HelloLua吧。边看代码边写的注释,应该基本都写了。-- for CCLuaEngine tracebac
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
Cocos2d-x-Lua示例项目HelloLua
针对于上面的问题,我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料。(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
Cocos2d-x Lua入门:HelloLua示例项目详解与实战指南
游戏开发中,跨平台引擎是构建2D移动游戏的关键技术。Cocos2d-x作为一款成熟的开源引擎,通过Lua绑定提供了灵活的脚本化开发能力,其核心原理在于将C++引擎功能暴露给Lua层,实现逻辑与渲染分离。这种架构为开发者带来了快速迭代和热更新的技术价值,尤其适用于需要频繁调整玩法与界面的移动游戏项目。在应用场景上,从简单的“Hello World”演示到复杂的游戏Demo,理解引擎初始化流程、显示对象树和事件分发机制是基础。本文以Cocos2d-x-Lua的HelloLua示例项目为切入点,深入剖析其项目结构
Cocos2d-x-Lua示例项目HelloLua,kotlin枚举类
》》main.cpp #include “AppDelegate.h” #include “cocos2d.h” USING_NS_CC; int main(int argc, char *argv[]) { AppDelegate app; return Application::getInstance()->run(); } 以上代码我们可以看到,在main.cpp里,通过#include引入了两个头文件,一个是AppDelegate.h、一个是cocos2d.h。 定义了我们程序的入口方法mai
Cocos2d-x-Lua演示样例项目HelloLua
Cocos2d-x-Lua演示样例项目HelloLua 本篇博客介绍Cocos2d-x中Lua的实例项目,就是使用Cocos2d-x创建的初始项目执行所呈现的农场,这里笔者取名为HelloLua。本篇博客会具体在代码中解析Cocos2d-x 3.1.1创建的Lua项目中实例,一些API的使用。 注:本演示样例项目在Mac系统下创建 首先我们来创建一个Cocos2d-x Lua项目,在...
Cocos2d-x 的“HelloLua” 深入分析
[Cocos2d-x相关教程来源于红孩儿的游戏编程之路 优快云博客地址:http://blog.youkuaiyun.com/honghaier] 红孩儿Cocos2d-X学习园地QQ群:249941957 加群写:Cocos2d-x 本章为我的Cocos2d-x教程一书初稿。望各位看官多提建议! 转载请注明来源:红孩儿的游戏编程之路 优快云博客 Cocos2d-x 的“HelloLu
Cocos2d-x-Lua示例项目HelloLua(1)
希望大家能有一个好心态,想进什么样的公司要想清楚,并不一定是大公司,我选的也不是特大厂。当然如果你不知道选或是没有规划,那就选大公司!希望我们能先选好想去的公司再投或内推,而不是有一个公司要我我就去!还有就是不要害怕,也不要有压力,平常心对待就行,但准备要充足。最后希望大家都能拿到一份满意的 offer!如果目前有一份工作也请好好珍惜好好努力,找工作其实挺累挺辛苦的。这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。
深入浅出cocos2d-x(1):Cocos2d-x 中“HelloLua” 深入分析
我们来看一下Cocos2d-x的HelloLua示例工程。首先编译运行一下这个工程,当然,因为我在HelloWorld工程中改动了CCApplication的run函数和initInstance函数,所以这里要修改一下,与HelloWorld保持一致才能编译成功。哇!一个很COOL的农场游戏。 这几乎是我
Cocos2d-x之LUA脚本引擎深入分析
FROM:http://www.2cto.com/kf/201303/197171.html原文内容如下:首先,我们要知道LUA是个什么东西,至于官方怎么说可以百度去查,但我想告诉你的是LUA就是一种可以在不必修改C++代码的情况下实现逻辑处理的手 段。稍微讲的再明白一点,就是你用指定语法写一些逻辑处理函数然后保存成文本格式,这个文件称为脚本文件,可以被游戏执行。经过若干年的发展,现在在 LUA中...
2763



被折叠的 条评论
为什么被折叠?



