win7 64
cocoStudio 版本 1.6.0.0
cocos2d.x.version: cocos2d-x 3.3
gl.version: 4.4.0
gl.supports_NPOT: true
cocos2d.x.version: cocos2d-x 3.3
cocos2d.x.compiled_with_profiler: false
cocos2d.x.build_type: DEBUG
cocos2d.x.compiled_with_gl_state_cache: true
gl.max_texture_size: 16384
gl.vendor: NVIDIA Corporation
gl.renderer: GeForce GTS 450/PCIe/SSE2
gl.max_texture_units: 192
gl.supports_ETC1: false
gl.supports_S3TC: true
gl.supports_ATITC: false
gl.supports_PVRTC: false
gl.supports_BGRA8888: false
gl.supports_discard_framebuffer: false
gl.supports_vertex_array_object: true
代码如下:
帖子修改之后 代码格式化出问题了…很无奈
local curScene = cc.Director:getInstance():getRunningScene()
if not curScene then
curScene = cc.Scene:create()
end
local itemTemp
itemTemp = ccs.GUIReader:getInstance():widgetFromJsonFile("bossReportItem/bossReportItem.json")
itemTemp:retain()
local btn = ccui.Button:create("back1.png",nil,nil,1)
curScene:addChild(btn)
btn:setPosition(100,100)
btn:setTouchEnabled(true)
btn:addTouchEventListener(function(s,e)
if e == ccui.TouchEventType.ended then
cc.SpriteFrameCache:getInstance():removeUnusedSpriteFrames()
cc.Director:getInstance():getTextureCache():removeUnusedTextures()
local delete = itemTemp:clone()
end
end)
经过
cc.SpriteFrameCache:getInstance():removeUnusedSpriteFrames()
cc.Director:getInstance():getTextureCache():removeUnusedTextures()
这两句话之后
itemTemp 的SpriteFrames 被删掉
导致clone() 报错
报错信息:
LUA ERROR:
{1:ASSERT FAILED ON LUA EXECUTE: CCSpriteFrame must be non-NULL – }
stack traceback:
:72: in function ‘printError’
:115: in function <:113>
: in function ‘clone’
:37: in function <:32>
报错C++ 代码:
bool Scale9Sprite::initWithSpriteFrameName(const std::string& spriteFrameName, const Rect& capInsets)
{
CCASSERT((SpriteFrameCache::getInstance()) != NULL, "SpriteFrameCache::getInstance() must be non-NULL");
SpriteFrame *frame = SpriteFrameCache::getInstance()->getSpriteFrameByName(spriteFrameName); //这里获取的frame为NULL 被removeUnusedSpriteFrames()清理掉了
std::string str;
str = "CCSpriteFrame must be non-NULL: ";
str += spriteFrameName;
CCASSERT(frame != NULL, str.c_str());
if (NULL == frame) return false;
bool pReturn = this->initWithSpriteFrame(frame, capInsets);
return pReturn;
}
过程
1 cocos 3.3新建lua 工程,没有导入代码
2 GameScene.lua
3 lua 调试, 使用 runtime/win32/PrebuiltRuntimeLua.exe
项目: 百度网盘 http://pan.baidu.com/s/1ntn6k5N
