¿Cómo recorre cocos2dx los archivos en la carpeta de recursos?
Este getAllFile puede devolver todos los directorios de archivos
std::vectorlt; std::stringgt; ZipFile::getAllFile(){
std::vectorlt; std::stringgt;
ZipFilePrivate:: FileListContainer::iterador it1;
for (it1=_dataThread-gt; fileList.begin(); it1!=_dataThread-gt; fileList.end(); it1) {
vec.push_back(it1-gt; first.c_str());
}
return vec;
}
Paso 2: use return valor de getAllFile para recorrer Aquí, el recorrido de iOS y Android se libera directamente al mismo tiempo, y las imágenes png y jpg se pueden usar para cargar recursos al mismo tiempo. p>
#include " support/zip_support/ZipUtils .h"
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#include lt;hgt;
#include lt; sys/stat.hgt;
#else
#include "plataforma/CCCommon.h"
#include "support/ zip_support/unzip.h"
#include "jni/Java _org_cocos2dx_lib_Cocos2dxHelper.h"
#endif
void ResourceLoadingLayer::getAllFile(std::string carpetaPath , profundidad int, std::stringgt; std::stringgt ; lista, std::string head){
#if CC_PLATFORM_IOS == CC_TARGET_PLATFORM
DIR *dp; p>
structdirent *entry;
structstat statbuf;
if((dp =opendir(folderPath.c_str()) == NULL) {
fprintf(stderr, "no se puede abrir el directorio: s\n ", carpetaPath.c_str());
return
}
chdir(folderPath. c_str());
mientras ((entrada = readdir(dp)) ! = NULL) {
lstat(entrada-gt;d_n
ame, amp; statbuf);
if(S_ISDIR(statbuf.st_mode)) {
if(strcmp(".", entrada-gt;d_name) == 0 ||
strcmp(".", entrada-gt; d_name) == 0)
Continuar
getAllFile(entry-gt; d_name, profundidad 4, lista, encabezado entrada-gt; d_name);
} else {
if (head.length() == 0) {
nombre de cadena = entrada -gt;d_name;
if (name.length()gt;3 amp;amp; name.rfind(".") gt; 0 amp;amp; (name.substr(name.rfind( ".") 1, 3) == "jpg" || nombre.substr(nombre.rfind(".") 1, 3) == "jpg" || nombre.substr(nombre.rfind(".") 1, 3) == "jpg" || nombre.substr(nombre.rfind(".") 1, 3) == "png")) {
list-gt; gt;d_name);
}
}
} else {
cadena nombre de archivo = head "/" entrada-gt;d_name ;
if (nombre de archivo.length()gt; 3 amp; amp; nombre de archivo.rfind(".") gt; 0 amp;amp; (nombre de archivo.substr(nombre de archivo.rfind(". ") 1, 3) == "/" nombre-entrada;
if (nombre de archivo.") 1, 3) == "jpg" || nombre de archivo.substr(nombre de archivo.rfind(".") 1 ,3) == "png")) {
lista-gt; push_back(nombre de archivo
}
}
}
}
chdir("...");
closedir(dp);
#else
;ZipFile* pFile = new ZipFile(getApkPath(), "assets/");
vectorlt; vec = pFile-gt(); int i=0; ilt; vec.size(); i ) {
archivo de cadena = vec.at(i);
if (file.compare("activos/" )) {
archivo = archivo.substr(7, archivo.longitud());
}
if (archivo.substr(0, carpetaPath. longitud()) == carpeta
Ruta ){
cadena nombre de archivo = file.substr( file.rfind("/") 1, file.length());
if (filename.length()gt; 3 amp; amp; nombre de archivo.rfind(".") gt; 0 amp;amp; (nombre de archivo.substr(nombre de archivo.rfind(".") == "jpg" || nombre de archivo.substr(nombre de archivo. rfind(".")) 1, 3) == "png") {
list-gt; push_back(nombre de archivo);
#endif
}
El tercer paso, use:
Primero, debe obtener la ruta completa de la carpeta de recursos. Hay muchas formas de hacer esto, solo un ejemplo:
Hay una imagen HelloWorld.png en el directorio raíz del recurso y podemos obtener su ruta completa directamente en el programa, es decir
string fullpath = CCFileUtils::sharedFileUtils.sharedFileUtils()-gt; fullPathForFilename("HelloWorld.png");
Entonces string resPath = fullpath.substr(0, fullpath.rfind("/ ") 1) ;
Después de obtener la ruta completa del recurso,
vectorlt; stringgt; vec;
getAllFile(resPath, 0, amp; vec, " ");
Esto será un gran éxito, el vec contendrá todos los recursos png o jpg y tendrá un nombre de archivo de encabezado Oh! Por ejemplo, bg/welcome.jpg
Lo anterior es para recorrer todas las carpetas. Si recorre un directorio solo bajo el archivo de recursos, es
getAllFile(resPath "xxx", 0, amp ;vec, ""); xxx es un subdirectorio en el directorio raíz del recurso, por lo que se puede cargar un directorio por separado