Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从侧面而不是从中心缩放CCSprite_C++_Xcode_Cocos2d Iphone_Cocos2d X - Fatal编程技术网

C++ 从侧面而不是从中心缩放CCSprite

C++ 从侧面而不是从中心缩放CCSprite,c++,xcode,cocos2d-iphone,cocos2d-x,C++,Xcode,Cocos2d Iphone,Cocos2d X,我正在尝试制作一个定制的进度条。我想做的是让“barMask.png”的X比例取决于数字的百分比。我试着这样做: barBack = CCSprite::create( "barBack.png" ); this -> addChild( barBack ); barMask = CCSprite::create( "barMask.png" ); barMask -> setPosition( barBack -> getPosition( ) ); this ->

我正在尝试制作一个定制的进度条。我想做的是让“barMask.png”的X比例取决于数字的百分比。我试着这样做:

barBack = CCSprite::create( "barBack.png" );
this -> addChild( barBack );

barMask = CCSprite::create( "barMask.png" );
barMask -> setPosition( barBack -> getPosition( ) );
this -> addChild( barMask );
Frame 1: [ |||||||||| ]
Frame 2: [  ||||||||  ]
Frame 3: [   ||||||   ]
然后是更新方法

// Scale the width of barMask depending on the percentage of the progress.
barMask -> setScaleX( CURRENT_AMOUNT / TOTAL_AMOUNT );
但是,精灵的缩放方式如下所示:

barBack = CCSprite::create( "barBack.png" );
this -> addChild( barBack );

barMask = CCSprite::create( "barMask.png" );
barMask -> setPosition( barBack -> getPosition( ) );
this -> addChild( barMask );
Frame 1: [ |||||||||| ]
Frame 2: [  ||||||||  ]
Frame 3: [   ||||||   ]
它收缩到中间。我怎样才能使它缩小到左/右?像这样:

Frame 1: [ |||||||||| ]
Frame 2: [ |||||||||  ]
Frame 3: [ ||||||||   ]
Frame 4: [ |||||||    ]

我知道CCProgressTimer,但我想在进度条上使用纯精灵。

将spriet的
anchorPoint
属性更改为(0.f,0.5f)。所有变换都与节点的定位点相关。默认情况下,精灵的锚点为(0.5f,0.5f)。这就是为什么默认情况下缩放与精灵的中心相对应。

另一种可能实现这一点的方法是使用draw方法和一点openGL。在我的太空射击应用程序中,我将其用于敌人的健康栏,根据敌人剩余的HP进行缩放。它改编自Ray Wenderlich的一本教程。不管怎样,这是我的绘制方法,它遍历屏幕上的每个boss“怪物”,并绘制它们的健康条。这是可以调整的,用于进度指示条的方法

- (void)draw {

for (CCSprite *target in _targets) {
    Monster *monster = (Monster *)target;

    if (monster.monsterisboss == YES) {

        static int lineBuffer = 5;
        int lineHeight = 7;
        int startY = monster.position.x - (monster.contentSize.width/2);
        int endY = monster.position.x + (monster.contentSize.width/2) - lineBuffer;
        int actualX = monster.position.y + (monster.contentSize.height/2) + lineHeight*2;

        static int maxColor = 200;
        static int colorBuffer = 55;
        float percentage = ((float) monster.hp) / ((float) monster.maxHp);
        int actualY = ((endY-startY) * percentage) + startY;
        int amtRed = ((1.0f-percentage)*maxColor)+colorBuffer;
        int amtGreen = (percentage*maxColor)+colorBuffer;

        glEnable(GL_LINE_SMOOTH);

        glLineWidth(lineHeight);        
        glColor4ub(amtRed,amtGreen,0,255);
        ccDrawLine(ccp(startY, actualX), ccp(actualY, actualX));
    }
}

[super draw];
}


“编辑”看起来像是我的代码块遗漏了最后一个结束的花括号-如果您想尝试上面的绘制方法,请不要忘记

谢谢。我以前查过锚定点,但是文档中没有足够的关于锚定点用法的信息。