紋理快取是將紋理快取起來方便之後的繪製工作。每乙個快取的影象的大小,顏色和區域範圍都是可以被修改的。這些資訊都是儲存在記憶體中的,不用在每一次繪製的時候都傳送給gpu。
首先,我們建立乙個精靈
sprite* sprite::create(const std::string& filename)
cc_safe_delete(sprite);
return nullptr;
}
然後,繼續深入,initwithfile
的方法
bool sprite::initwithfile(const std::string& filename)
// don't release here.
// when load texture failed, it's better to get a "transparent" sprite then a crashed program
// this->release();
return false;
}
最後在texturecache 的 addimage方法裡,我們會先去集合裡查詢是否之前載入過,如果沒有找到,那麼我們就會新生成一張紋理,並且新增到集合裡。
ccspriteframecache單例是所有精靈幀的快取。使用spritesheet和與之相關的xml檔案,我們可以載入很多的精靈幀到快取中,那麼之後我們就可以從這個快取中建立精靈物件了。
在texturecache中有個getcachedtextureinfo的方法
這個方法可以輸出每一張紋理所占用的記憶體,但是log日誌輸出檢視的話,難免不夠直觀,檢視起來不太方便,所以這裡我就想到把所有的這些紋理封裝到乙個node裡,然後顯示在螢幕上。
node* texturecache::getcachedtexturenode() const
unsigned int bpp = tex->getbitsperpixelforformat();
// each texture takes up width * height * bytesperpixel bytes.
auto bytes = tex->getpixelswide() * tex->getpixelshigh() * bpp / 8;
totalbytes += bytes;
count++;
snprintf(buftmp,sizeof(buftmp)-1,"\"%s\" rc=%lu id=%lu %lu x %lu @ %ld bpp => %lu kb\n",
it->first.c_str(),
(long)tex->getreferencecount(),
(long)tex->getname(),
(long)tex->getpixelswide(),
(long)tex->getpixelshigh(),
(long)bpp,
(long)bytes / 1024);
buffer += buftmp;
}snprintf(buftmp, sizeof(buftmp)-1, "texturecache dumpdebuginfo: %ld textures, for %lu kb (%.2f mb)\n", (long)count, (long)totalbytes / 1024, totalbytes / (1024.0f*1024.0f));
buffer += buftmp;
return node;
}
接下來就是js的工作了,至於怎麼匯出c++介面到js中,這裡就不作介紹了,在js中我們建立了乙個叫memorylayer
的類,專門用來負責顯示快取。
var memorylayer = cc.layercolor.extend(,
initview:function(),
closebtnlistener:function(_sender,_type)
},inittouchevent : function());
cc.eventmanager.addlistener(listener,this);
},ontouchbegan : function(touch,event),
ontouchmoved : function(touch,event)
node.setpositiony(node.getpositiony()+dis);
},ontouchended : function(touch,event),
})
最後以一張效果圖作為本期節目的結束:
記憶體檢視器
最近新到乙個公司上班,所做的專案與網路通訊有關,網路通訊,必然涉及到收發網路包,為了檢查我封裝的包的資料是否正確,為了便於與通訊方進行比對,我需要獲得最終收發包的二進位制資料。這個通常有以下實現方式 1 網路抓包,典型的做法是,根據通訊網路裝置的組網,在交換機建立port mirroring,把執行...
mysql事件檢視器 MYSQL事件檢視器使用介紹
要檢視當前是否已開啟事件排程器 show variables like event scheduler 開啟事件檢視器 set global event scheduler 1 建立事件 語法 create event if not exists event name on schedule sch...
檔案檢視器
上節課中學習了如何載入乙個網路,這節課接著上節課的 來寫乙個引導程式。首先,可以重用上節課中的載入的 新新增的東西就是,乙個button,乙個text文字標籤,乙個filedialog檔案對話方塊。具體 如下 import qtquick 2.2 import qtquick.window 2.1 ...