FAQ: cocos2d for iPhone: How can i draw a simple Point, Line or Circle? Comments Feed" href="http://www.learn-cocos2d.com/knowledge-base/cocos2d-iphone-faq/feed/"/>

FAQ: cocos2d для iPhone: Как я могу потянуть простой Пункт, Линию или Круг?

How can i draw a simple Point, Line or Circle?

Ищите мой cocos2d часто задаваемые вопросы iPhone & Обучающие программы

Пожалуйста, отметьте, что поиск блога в правом верхнем углу не ищет мои часто задаваемые вопросы и Обучающие программы.
 

  • Отметьте: пожалуйста, не разделяйте прямые ссылки для скачивания к файлам PDF, ссылки для скачивания истекают после пары минут!

Вы можете использовать cocos2d's простую обертку OpenGL для этого. Все функции, в которых Вы нуждаетесь, определены в CCDrawingPrimitives.h, который также содержит методы, чтобы потянуть многоугольники.

Урок загрузки PDF

Таща Пункт, Линию и Круг

Это - кодекс, чтобы потянуть пункт, линию и круг. Заметьте, что кодекс в - (недействительный) метод ничьей. ccDraw* методы только работают в методе ничьей CCNode (или подкласс CCNode как CCLayer, CCSprite и так далее). Этот CCNode должен также быть где-нибудь в иерархии ничьей, например добавленной к CCScene как ребенок. The ccDraw* methods only work in the draw method of a CCNode (or a subclass of CCNode like CCLayer, CCSprite and so on). This CCNode must also be somewhere in the draw hierarchy, for example added to the CCScene as child.

OpenGL тянут методы, очень полезны для того, чтобы отладили, например показали положения и anchorPoints объектов. ccDrawCircle метод может также отдать линию из своего центра за пределы в определенном углу. Это может использоваться, чтобы показать вращение CCNode. Отметьте, что угол находится в радианах, тогда как вращение CCNode находится в степенях, таким образом, Вы должны преобразовать это с CC_DEGREES_TO_RADIANS (..) макро-. This can be used to display the rotation of a CCNode. Note that angle is in radians whereas CCNode rotation is in degrees, so you have to convert it with the CC_DEGREES_TO_RADIANS(..) macro.

Продукция

Рисование более толстых линий

Те широкие линии с 1 пикселом, возможно, не идеальны. Попробуйте GL_MULTISAMPLE и команды glLineWidth, чтобы изменить стили линии. Поместите эти команды перед фактическим кодексом ccDrawLine. Put these commands before the actual ccDrawLine code.

С GL_MULTISAMPLE и glLineWidth (3) Вы получаете хороший тянущий линию эффект, очень подобный одному использованию Владельца Гавани.

Комментарии (0)

Связанные Вопросы

11 Ответов на “часто задаваемые вопросы: cocos2d для iPhone: Как я могу потянуть простой Пункт, Линию или Круг?

How can i draw a simple Point, Line or Circle?
  1. Макс говорит:

    Просвещение почты. Спасибо!

    И, конечно, у меня есть некоторые вопрос :)

    - все относительно, но для общего кодекса лучше, чтобы использовать NSString, NSArray (и заплатить стоимость создания новых объектов) или изменчивые? Который может быть параметрами, чтобы выбрать между каждым?

    - Я задаюсь вопросом, будет ли новый iPhone 4.0′s большая работа проблемой. Игры, которые управляют гладко в iPhone 1-ыми и 2-ыми устройствами поколения, будут, вероятно, бежать слишком быстро?

    • GamingHorror говорит:

      Привет Макс,

      я сомневаюсь, что наборы данных NSMutable* - исполнительные убийцы. Я не сделал тестов, но я вполне уверен, что, если Вы не изменяете их вообще, они, вероятно, выступят столь же хороший как неизменчивые. Теперь, однажды Вы *do* должен изменить множества или последовательности, хорошо иметь их изменчивый так, чтобы материал заботился для Вас негласно. С другой стороны, если Вы знаете, что будете только создавать пункты однажды, но никогда переупорядочивать, удалять или добавлять, что другие тогда используют неизменчивые. Для меня это - вопрос случая использования, а не работы. Now, once you *do* need to change the arrays or strings it’s good to have them mutable so that stuff is taken care for you behind the scenes. On the other hand, if you know that you’ll only be creating the items once but never re-order, remove or add others then use the non-mutable ones. For me it’s a matter of use case rather than performance.

      Игры не будут бежать быстрее на более новых устройствах. cocos2d’s CCDirector удостоверяется этого. Вы поправляетесь framerates, конечно, но не более быстрый геймплей. Это сохраняется для всех современных двигателей игры. You do get better framerates of course but not faster gameplay. That holds true for all modern game engines.

  2. Шон говорит:

    Привет gaminghorror. Спасибо за всю большую информацию о Вашем блоге:), Действительно находящем это полезный.

    Я хотел спросить о Вашем кодексе фона параллакса выше – я использую это в испытательном проекте, но, может казаться, не заставляю черепицу соответствовать отлично рядом с eachother. Другими словами мой эльф, которого я крою черепицей (который является 480, 320 в размере) кроет черепицей, но когда новый эльф начинается, есть черный промежуток приблизительно 25 пикселов, широких между новым и старым. Там какой-либо путь - к elliminate этот промежуток? Я попытался искать cocos2d форумы и т.д., и нашел информацию о 2-ом проектировании, выключающем и т.д. …, но ничего подобного до сих пор не помогал мне … попытаться иллюстрировать то, что я получаю, это - то, что я становлюсь завивающимся через экран устройства (x’s эльф, белое пространство - черный промежуток, который я получаю): Is there any way to elliminate this gap? I have tried searching the cocos2d forums etc, and found info on 2D projection turning off etc… but none of that has helped me so far… To try and illustrate what I am getting, this is what I get scrolling across the device screen (x’s are the sprite white space is the black gap I get):

    xxxxxxxxxxxxxxx | |xxxxxxxxxxxxxxxx | |xxxxxxxxxxxxxxxxxx | |xxxxxxx

    • GamingHorror говорит:

      Это, кажется, погашение размещения, действительно ли Вы уверены, что эльфы - точно 480 пикселов обособленно каждый? У обоих также должен быть тот же самый anchorPoint. И если Вы изменяете масштаб эльфов, погашение также должно быть приспособлено соответственно. And if you change the scale of the sprites, the offset also needs to be adjusted appropriately.
      Вы могли бы хотеть проверить размещение с меньшими эльфами так, чтобы по крайней мере два из них соответствовали полностью на экране.

      • Шон говорит:

        Привет GamingHorror, большое спасибо за ответ:) Так этим утром я просыпался и имел ясный ум – думал об этом некоторое время, Мой эльф для фона точно 480×320 – то есть screensize. Промежуток, который я видел отчасти, осматривал 20-30 пикселов между каждым повторным эльфом. Таким образом, я думал, эй, в 480, мне только дают структуру, которая является 512 в праве размера? Так возможно его выполнение полного 512pixel структура. Таким образом, я вернулся к фотошопу, и увеличил свою ширину эльфа до 512 (как я, wouldnt теряют любую работу так или иначе), и дал этому попытку, используя Ваш кодекс: So I thought, hey, at 480, I am just being given a texture that is 512 in size right? So maybe its doing a full 512pixel texture. So I went back to photoshop, and increased my sprite width to 512 (as I wouldnt lose any performance anyway) and gave this a try, using your code:

        CCSprite *background = [CCSprite spriteWithFile:@ "tile1.png"
        rect:CGRectMake (0,0, 480*50, 320)];
        [сам addChild:background];
        [фон setPosition:ccp (winSize.width/2, winSize.height/2)];
        ccTexParams params = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT};
        [background.texture setTexParameters: ¶ms];

        и это улаживало это! Больше промежутков. Большое спасибо за указатели также – я не думал о anchorPoints! Еще раз спасибо за большой блог. Я подписан! Thanks so much for the pointers too – I hadn’t thought about anchorPoints! Thanks again for the great blog. I am subscribed!

        • GamingHorror говорит:

          Ах да, если Вы используете GL_REPEAT тогда, размер изображения должен быть властью два. Eg 64×64 или 512×128

          • Шон говорит:

            Удивительный – который убирает вещи для меня и имеет прекрасный смысл теперь. Спасибо за подтверждение. Мой слоистый завивающийся параллакс выглядит сладким теперь! My layered parallax scrolling is looking sweet now!

  3. Шон говорит:

    Так другой быстрый вопрос … я предполагаю, что не будет возможно использовать spritesheet с GL_REPEAT? Особенно путь Вы должны создать CGRect

    В настоящее время я делаю другую графику от spritesheets как это:

    CCSprite *projectile = [CCSprite spriteWithSpriteFrameName:@ "missile.png"];

    Которые загружены от моего.plist / spritesheet. Не возможный назначить фон GL_REPEAT как это?

    • Так как GL_REPEAT - параметр структуры, он относится к целой структуре, таким образом, Вы должны будете использовать единственную структуру изображения, и размер должен быть властью 2, eg 128×16 или 256×256.

      Это также исключает использование spritesheet.

  4. Маттис говорит:

    Используя эту технику это работает хорошо в тренажере, но на устройстве структура является суперглыбовой и pixellated. Я управляю этим тестом на cocos2d 0.99.5.

    Ив попробовал и 256×256 и 512×512 структуры, и результат - то же самое. Тренажер повторяется отлично, отрезки устройства и pixellates структура ужасно.

    У Вас есть какая-либо идея, почему это происходит?

Оставьте Ответ