急用!关于Cocos2dx的图片加载问题!
我现在有30张Png格式的图片,但是一个下标为121(0~120)的数组要读取它。从1开始读。下面是关于cards(乱序数组)的代码:intcards[__CARD_NU...
我现在有30张Png格式的图片,但是一个下标为121(0~120)的数组要读取它。从1开始读。
下面是关于cards(乱序数组)的代码:
int cards[__CARD_NUM__];
void swap(int &x,int &y)
{
int tmp = x;
x = y;
y = tmp;
}
void RandomCards()
{
for (int i = 0; i < __CARD_NUM__;i++)
cards[i] = i + 1;
for (int i = 0; i < __CARD_NUM__; i++)
swap(cards[i], cards[rand() % (__CARD_NUM__ - i) + i]);
}
其中__CARD_NUM__是一个常量(C++中的Define,这里为120)。另外一个数组_cards[__CARD_NUM__ + 1];是一个CCSprite数组。
我的想法是循环读取:
for(int i = 1 ; i <= __CARD_NUM__ ; i++)
{
char *c = new char;
string s;
itoa(cards[i - 1] , c, 10);
s = c;
string str = "Cards\\" + s + ".png";
//下面有问题
for(int j = 1 ; j<= 4 ; j++)
_cards[j] = Sprite::create(str);
}
我也发现了这个问题。我的想法是当i为1,2,3,4时读取1.png,当i为5,6,7,8时读取2.png。我并不想用switch实现(这货烦得要死),那么有没有什么函数可以使用代替这里的switch效果呢?如果没有,麻烦帮忙写一下switch吧……
还有这个:
for(int i = 1 ; i <= 4 ; i++)
{
//_cards[i]->setScale(1 / __SF_SIZE__);
//_cards[i]->getContentSize();
Point AutoSetPoint = ccp(scw / 2 - (size.width / 2)*( (26-1) - 2*(i-1) ) , size.height / 2.0f);
//_cards[i]->setPosition(ccp(scw / 2 , size.height / ( 2.0f * __SF_SIZE__) ));
_cards[i]->setPosition(AutoSetPoint);
this->addChild(_cards[i],i + 2);
}
我的想法是读26个,即i设为26.但是i一到5就会报异常。这是不是和上面的有关呢?又如何改进呢? 展开
下面是关于cards(乱序数组)的代码:
int cards[__CARD_NUM__];
void swap(int &x,int &y)
{
int tmp = x;
x = y;
y = tmp;
}
void RandomCards()
{
for (int i = 0; i < __CARD_NUM__;i++)
cards[i] = i + 1;
for (int i = 0; i < __CARD_NUM__; i++)
swap(cards[i], cards[rand() % (__CARD_NUM__ - i) + i]);
}
其中__CARD_NUM__是一个常量(C++中的Define,这里为120)。另外一个数组_cards[__CARD_NUM__ + 1];是一个CCSprite数组。
我的想法是循环读取:
for(int i = 1 ; i <= __CARD_NUM__ ; i++)
{
char *c = new char;
string s;
itoa(cards[i - 1] , c, 10);
s = c;
string str = "Cards\\" + s + ".png";
//下面有问题
for(int j = 1 ; j<= 4 ; j++)
_cards[j] = Sprite::create(str);
}
我也发现了这个问题。我的想法是当i为1,2,3,4时读取1.png,当i为5,6,7,8时读取2.png。我并不想用switch实现(这货烦得要死),那么有没有什么函数可以使用代替这里的switch效果呢?如果没有,麻烦帮忙写一下switch吧……
还有这个:
for(int i = 1 ; i <= 4 ; i++)
{
//_cards[i]->setScale(1 / __SF_SIZE__);
//_cards[i]->getContentSize();
Point AutoSetPoint = ccp(scw / 2 - (size.width / 2)*( (26-1) - 2*(i-1) ) , size.height / 2.0f);
//_cards[i]->setPosition(ccp(scw / 2 , size.height / ( 2.0f * __SF_SIZE__) ));
_cards[i]->setPosition(AutoSetPoint);
this->addChild(_cards[i],i + 2);
}
我的想法是读26个,即i设为26.但是i一到5就会报异常。这是不是和上面的有关呢?又如何改进呢? 展开
1个回答
展开全部
如果你是4个一组读取的话,可以用取余 __CARD_NUM__%4,然后得到的1,2,3,0分别就是1,2,3,4===5,6,7,8===9,10,11,12......
于是switch可以用
switch(__CARD_NUM__%4)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 0:
break;
}
(因为你是从1开始++的,所以只好1,2,3,0。)
至于下面的。。首先为什么是Point而不是 CCPoint?其次。。你的循环就到4,怎么会到5.。
建议最好循环还是从i=0开始,否则有很多意想不到的错误。
于是switch可以用
switch(__CARD_NUM__%4)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 0:
break;
}
(因为你是从1开始++的,所以只好1,2,3,0。)
至于下面的。。首先为什么是Point而不是 CCPoint?其次。。你的循环就到4,怎么会到5.。
建议最好循环还是从i=0开始,否则有很多意想不到的错误。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询