热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[cocos2dxlua]"HelloLua"分析「建议收藏」

[cocos2dx-lua]"HelloLua&quo

一年之前学的cocos2dx,那时候还是用C++编写的。但学完之后就找的一个新的方向——Unity3D开发的岗位,对我而言是一个新方向,那时候经过了几个月的每天熬夜奋战,从”0“基础到最后项目开发,那时候是在的是个小公司,整体而言还算比較轻松,可能效率利用的比較低。如今刚出来了。来到一家大公司。感觉到非常多不一样的变化。方向又改变了,还是回到之前的cocos2dx开发,但用的不是C++,而是lua脚本语言来开发,对我而言又是差点儿是从新開始。既来之则安之,在接触了那么多方向之后,是该选择一个确定的研究方向深入下去。

来这该公司一周了,感受到一种之前所没有的紧迫感,每天要给自己下定任务,而且按时按量的去完毕,同事都非常厉害。都是在这行业工作了多少年的。非常有工作经验。希望以后像他们多多请教,公司好多女程序,都非常厉害,我的直属上司杨总就是当时面试我的,我以为当时面试的时候他旁边的那位是秘书的,挺美丽的一个女”上司“,我一直以为是秘书。看起来非常年轻,后来从同事那儿了解到她是我们全部人的上司,是公司的技术总监。好吧,我吃惊了,原来她是公司元老级别的程序了。第一天入职,办理好入职手续,下午的时候老大递给了我一本Lua编程的教程。不是太厚,但也不薄,三百多页吧。后来花了两天左右的时间将它看完。因为之前学的语言都是编译型语言,用上强大的Visutial studio+VA提示功能非常强大。导致如今要用文本编辑器来写lua语言有点痛苦。非常easy手误,但还是要慢慢习惯。不论什么事物都有两面性,没有所谓绝对的完美。

花两天时间看完lua语法,然后花了一天看了下cocos2dx lua的Demo,接下来就能够进行项目开发了,不然每天开例会总是处于学习阶段总感觉不好,公司不会养两种人,懒人和闲人,所以还是多花点业余时间来弥补自己的缺陷,跟上大部队的开发。

  • 创建Cocos2dx-Lua项目

我这里使用的是Visual Studio 2012+cocos2dx 2.2.4,前提安装上Python

打开控制台。通过命令来创建新的项目

[cocos2dx-lua]

然后打开cocos2dx的projects文件夹发现生成了刚刚创建的lua项目[cocos2dx-lua]

假设是Windows平台就打开proj.win32->luastudy1.sln,编译一下就可以执行势力demo。

  • 效果图

[cocos2dx-lua]


cocos2dx lua项目。lua脚本放在Resources文件夹下。也就是说lua脚本也像图片。声音资源这些一样被当成是资源利用了,所以假设程序要逻辑跟新或者说有什么bug,能够直接改动lua文件然后又一次上传就可以,不需要再次编译公布。这也是lua开发cocos2dx的一大长处。

  • lua脚本

require "AudioEngine" -- for CCLuaEngine traceback function __G__TRACKBACK__(msg) print("----------------------------------------") print("LUA ERROR: " .. tostring(msg) .. "\n") print(debug.traceback()) print("----------------------------------------") end --打印函数 local cclog = function(...) print(string.format(...)) end function main() --调用其它脚本的方法 require "hello2" --调用其它lua的脚本中的方法 cclog("调用hello2脚本的方法:Result = "..myadd(3,5)) --获取屏幕分辨率 local visibleSize = CCDirector:sharedDirector():getVisibleSize() --获取屏幕分辨率的起始坐标 local origin = CCDirector:sharedDirector():getVisibleOrigin() print("可视区域的起点坐标:",origin.x,origin.y) print("屏幕分辨率:",visibleSize.width,visibleSize.height) --创建一个场景 local scene = CCScene:create() --创建一个层 local layer = CCLayer:create() --创建一个文本 local label = CCLabelTTF:create("你好 Lua","simkai",50) --假设中文不显示的话,必需要将lua文件保存为中文 label:setPosition(ccp(visibleSize.width/2+30,visibleSize.height/2+100)) layer:addChild(label) --创建一个Sprite图标 local icOnSprite= CCSprite:create("Icon.png") iconSprite:setPosition(ccp(80,260)) layer:addChild(iconSprite) ----------------------------创建一个动画精灵--------------------------------------------------- local function createDog() --创建一个动画(这里是两张图片合成的一张,所以要依据矩形切割) local frameWidth = 105 local frameHeight = 95 --纹理块管理器创建一个图片文理 local textureDog = CCTextureCache:sharedTextureCache():addImage("dog.png") local rect = CCRectMake(0,0,frameWidth,frameHeight) --创建精灵帧 local frame0 = CCSpriteFrame:createWithTexture(textureDog,rect) rect = CCRectMake(frameWidth,0,frameWidth,frameHeight) local frame1 = CCSpriteFrame:createWithTexture(textureDog,rect) --创建一个精灵 local spriteDog = CCSprite:createWithSpriteFrame(frame0) spriteDog.isPaused = false spriteDog:setPosition(origin.x+visibleSize.width-60,origin.y + visibleSize.height/2) local animFrames = CCArray:create() animFrames:addObject(frame0) animFrames:addObject(frame1) --由容器类实例对象创建一个动画帧对象,设定每0.4秒更新一帧 local animation = CCAnimation:createWithSpriteFrames(animFrames,0.4) --第二个參数是播放的速率,值越小播放越快 --创建一个动画 local animate = CCAnimate:create(animation) --设置精灵循环播放这个动作 spriteDog:runAction(CCRepeatForever:create(animate)) --设置精灵颜色 --spriteDog:setColor(ccc3(0,255,0)) --自己定义一个定时器 local function tick() if spriteDog.isPaused then return end local x,y = spriteDog:getPosition() --获取坐标 if x这里并不播放,预载入是为了在播放时不造成卡顿感。 --SimpleAudioEngine:sharedEngine():preloadEffect("effect1.wav"); --或者 local effectPath = CCFileUtils:sharedFileUtils():fullPathForFilename("effect1.wav") AudioEngine.preloadEffect(effectPath) --加入动画狗 layer:addChild(createDog(),4) --第二个參数是Z(深度),值越大越在前面 --加入可移动的背景层到主场景中 scene:addChild(createMoveLayer()) --加入menu菜单 scene:addChild(createLayerMenu()) --加入自己绘制的图标和文字层 scene:addChild(layer) --执行场景 CCDirector:sharedDirector():runWithScene(scene)end--脚本的入口函数,前面一个參数是调用执行的函数。后面一个是错误处理的函数xpcall(main, __G__TRACKBACK__)

注意:假设要显示中文。解决方式将lua文件保存为utf8格式

[cocos2dx-lua]

[cocos2dx-lua]








推荐阅读
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 在编译 PHP7 的 PDO MySQL 扩展时,可能会遇到 `[mysql_driver.lo]` 错误 1。该问题通常出现在 `pdo_mysql_fetch_error_func` 函数中。本文详细介绍了导致这一错误的常见原因,包括依赖库版本不匹配、编译选项设置不当等,并提供了具体的解决步骤和调试方法,帮助开发者快速定位并解决问题。 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 在本文中,我们将详细介绍如何构建一个用于自动回复消息的XML类。当微信服务器接收到用户消息时,该类将生成相应的自动回复消息。以下是具体的代码实现:```phpclass We_Xml { // 代码内容}```通过这个类,开发者可以轻松地处理各种消息类型,并实现高效的自动回复功能。我们将深入探讨类的各个方法和属性,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 深入理解Java中的多态性概念及其应用
    多态是面向对象编程中的三大核心特性之一,与封装和继承共同构成了面向对象的基础。多态使得代码更加灵活和可扩展,封装和继承则为其提供了必要的支持。本文将深入探讨多态的概念及其在Java中的具体应用,帮助读者全面理解和掌握这一关键知识点。 ... [详细]
  • 当使用 `new` 表达式(即通过 `new` 动态创建对象)时,会发生两件事:首先,内存被分配用于存储新对象;其次,该对象的构造函数被调用以初始化对象。为了确保资源管理的一致性和避免内存泄漏,建议在使用 `new` 和 `delete` 时保持形式一致。例如,如果使用 `new[]` 分配数组,则应使用 `delete[]` 来释放内存;同样,如果使用 `new` 分配单个对象,则应使用 `delete` 来释放内存。这种一致性有助于防止常见的编程错误,提高代码的健壮性和可维护性。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 《我的世界》Java版种子合集:探索多样世界生成
    本文介绍了《我的世界》Java版中用于生成多样化游戏世界的种子代码。这些种子是由一个或多个字符(包括正整数和负整数)组成的值,能够为玩家带来截然不同的地形和环境体验。通过使用不同的种子,玩家可以探索各种独特的地貌、生物群系和结构,从而丰富游戏的乐趣和挑战性。 ... [详细]
  • 在PHP中,高效地分割字符串是一项常见的需求。本文探讨了多种技术,用于在特定字符(如“或”)后进行字符串分割。通过使用正则表达式和内置函数,可以实现更加灵活和高效的字符串处理。例如,可以使用 `preg_split` 函数来实现这一目标,该函数允许指定复杂的分隔符模式,从而提高代码的可读性和性能。此外,文章还介绍了如何优化分割操作以减少内存消耗和提高执行速度。 ... [详细]
  • 本文探讨了在任务完成后将其转换为最终状态时的异常处理机制。通过分析 `TaskCompletionSource` 的使用场景,详细阐述了其在异步编程中的重要作用,并提供了具体的实现方法和注意事项,帮助开发者更好地理解和应用这一技术。 ... [详细]
author-avatar
arliejun
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有