恼人的伪bug!
游戏还没做完,不但没有做完,而且还差相当多的东西!
由于之前没有仔细考虑过关卡文件后期的拓展性,以至于很多预想的游戏元素都无法通过关卡文件添加到游戏里面
此数日主要用来对这些问题进行整改
整改之前也狠狠想了一段时间,根据游戏后面的逻辑,还需要加入哪些元素,
怎么在关卡里面为这些元素预留初始化的数据,等等
可以说,游戏看上去虽然简单,但是一步步的走下来,每一个步伐都不那么轻松
希望能认真做好一件事的态度、丰厚的回报以及游戏慢慢展现出来的效果,这些都给我带来了很大的动力!
今天遇到一个bug,有很奇葩的地方,待我贴两段代码看一下就知道奇葩在什么地方了:
片段1:
-(void) tick: (ccTime) dt {
if(_single.cutCount <_maxCutCount && !_drawing &&_laserSegment) {//在更早的时候消除可能报出的错误,提高程序性能~
b2Vec2 p1 =_laserSegment.p1;
b2Vec2 p2 =_laserSegment.p2;
float segmentLength = sqrt(pow(p2.y - p1.y,2.0f) +pow(p2.x - p1.x,2.0f));
if(segmentLength >=2.0f) { // 如果划线的长度超过64个像素(retina里面是128个像素)~
{
NSLog(@"1");
RayCastCallbackPrepare prepareCallback;
_world->RayCast(&prepareCallback, _laserSegment.p1, _laserSegment.p2);
_world->RayCast(&prepareCallback, _laserSegment.p2, _laserSegment.p1);
NSLog(@"2");
}
NSLog(@"3");
BOOL isCutValid = [self checkCutValidOrNot:_laserSegment.p1p2:_laserSegment.p2];
片段2:
#import"RayCastCallbackPrepare.h"
/** 相信我,会有的!! */
int fixtureIndexInVector(vector<b2Fixture*> *v,b2Fixture *fixture);
int bodyIndexInVector(vector<b2Body*> *v,b2Body *body);
/** 构造 */
RayCastCallbackPrepare::RayCastCallbackPrepare() {
NSLog(@"RayCastCallbackPrepare构造开始~");
_single = [BYSinglegetInstance];
_validCallbackTimes =0;
_affectedBodyByLaser =newvector<b2Body*>();
_affectedBodyByLaserFinal =newvector<b2Body*>();
_affectedByLaser =newvector<b2Fixture*>();
_balloonsBeenCutted =newvector<b2Body*>();
[_singlesetIsPirateExists:NO];
[_singlesetIsBalloonBeenCutted:NO];
NSLog(@"RayCastCallbackPrepare构造结束~");
}
/**
* 析构
* 因为回调函数的特殊性,如果不想在每次回调的时候都对单例对象设置一次值的话
* 唯有在析构方法里面完成最后一次设置(因为回调的次数是难以确定的)
* 这也就是 GoldMineScene 中raycast方法调用的那几行必须用小括号包起来的原因!!!
* 因为要即时析构获得计算出来的结果!!!
*/
RayCastCallbackPrepare::~RayCastCallbackPrepare() {
NSLog(@"RayCastCallbackPrepare析构开始~");
[_singlesetReverseDirectionCallbackTimes:_validCallbackTimes];
[_singlesetAffectedBodyByLaserFinal:_affectedBodyByLaserFinal];
// vector的释放需要谨慎处理~
for(uint i = 0; i < _affectedBodyByLaser->size(); ++ i) {
相关新闻>>
- 发表评论
-
- 最新评论 更多>>