将一个滑块(如“TrainYard”中)添加到cocos2d项目中

时间:2010-12-23 22:07:55

标签: cocos2d-iphone

我真的尝试了一切: stackoverflow,google,github,cocos2d,一切。 没有找到任何有助于创建在GAME中看起来很好的自定义滑块的东西,我成功添加了一个普通的UISlider并稍微更改了它的属性,比如maximumValueImage等等......但它很糟糕。 请帮助

1 个答案:

答案 0 :(得分:0)

如果您在TrainYard中提到“速度”栏,可以通过使用“状态”图像“按”和“正常”(就像您可以使用常规按钮)轻松实现,然后设置简单的“背景”图片。它或多或少都在图形中。

一般来说,代码只是检查触摸是否在“按钮”上,然后“锁定”Y轴并使X轴跟随移动。一旦触摸是“关闭按钮”的X或Y中的“因子”,你只需“释放”(当触摸首先离开按钮时不要释放,给他们一个窗口来触摸适合它的按钮,但给它们一个更大的“释放”窗口,这样“幻灯片”可以感觉更自然,不需要沿X轴绝对精确。)

如果“0”处的“滑块按钮”位于相对于背景的ccp(25,15)处,并且位于ccp(100,15)处为“100”,那么您将使用以下内容根据“滑块按钮”当前位置确定“当前值”:

// constants
#define SLIDER_MIN   0.0f;
#define SLIDER_MIN_X 25.0f;
#define SLIDER_MAX   100.0f;
#define SLIDER_MAX_X 100.0f;
#define SLIDER_TICKS (SLIDER_MAX_X - SLIDER_MIN_X);
#define SLIDER_RATIO (SLIDER_TICKS / SLIDER_MAX)

// sliderButton should be a child of a node containing the background
// it's X/Y should be relative to that parent, and the "slider bar" should
// either be the parent or be attached to the parent in the same way

// assume: sliderButton.position.x = 63
float sliderCurrent = sliderButton.position.x - SLIDER_MIN_X;
// sliderCurrent = 38
float currentValue = sliderCurrent / SLIDER_RATIO;

这导致以下结果:

SLIDER_TICKS = 100 - 25;
// SLIDER_TICKS = 75
SLIDER_RATIO = 75 / 100;
// SLIDER_RATION = .75
sliderCurrent = 63 - 25;
// sliderCurrent = 38
currentValue = 38 / .75
// currentValue = 50.66666666667

然后你可以选择ceil()或floor()这个值来得到一个整数,或者你可以只使用返回的值(实际上取决于你的逻辑)。

我的建议是设计你的作品,使你的“50%”标记“死”。换句话说,当玩家将滑块放在50%部分时,您可以从上面的代码中获得值“50.0”而不使用ceil()或floor()。

但这完全是图形驱动的......滑块按钮的“按下”和“正常”状态,以及“滑块按钮”滑动的图形(“背景”)完全取决于您。< / p>

注意:锁定X轴使其不再适合您的艺术品,并完全锁定Y轴,如前所述。