Пример кода кривой Безье при касаниях перемещен

Я ищу пример кода для рисования кривой Безье с помощью прикосновений, если у кого-то есть ссылки или пример кода, пожалуйста, помогите мне. Я разрабатываю игру для управления полетом, в которой я должен перемещать свой ccsprite по пути, который пользователь рисует пальцем.

РЕДАКТИРОВАТЬ: Спасибо за предложение, теперь я создаю кривую с помощью CAShapeLayer и CAKeyframeAnimation. Теперь мне нужно удалить кривую, один пользователь передаст наше приложение it.like in filght control, если ccsprite движется по пути, обратный путь удаляется так, спасибо очень


person Appsunic    schedule 30.08.2012    source источник


Ответы (2)


Кривые Безье строятся с использованием двух конечных точек и двух опорных точек. Нарисовать кривую Безье с этой информацией очень просто. Получение этих точек из нарисованной от руки кривой называется векторизацией (трассировкой изображения). Я довольно сложная задача.

Я думаю, что вы можете получить гораздо лучшие результаты, используя такой простой алгоритм:

  1. Хранить все координаты в списке FIFO
  2. переместите свой спрайт в направлении следующей точки списка
  3. как только спрайт станет достаточным для точки, откажитесь от точки и продолжите со следующей точки
  4. Облегчите движение, используя простой алгоритм сглаживания (xSpeed, ySpeed, демпфирование), просто спросите меня, нужна ли вам помощь для этого

РЕДАКТИРОВАТЬ :

Я только что посмотрел видео управления полетом, я бы сделал так. Как только пользователь нажимает на один, он выбирает его. Затем пользователь начинает рисовать, наносит точки одну за другой как можно ближе к пальцу пользователя (движения ограничены радиусом поворота плоскости). Это запишет цепочку шагов. Каждый шаг определяется своим углом (думаю, скорость постоянна), этот угол должен быть равен предыдущему +/- поворотливость.

Используйте простую тригонометрию для вычисления координат x,y.

Посмотрите на это: Как сделать спрайт указывает на мышь. XNA С#

Вы найдете лучшую помощь для этого на https://gamedev.stackexchange.com/, если у кого-то есть готовый для вставки код, похожий на что вам нужно. Я сделал это много лет назад в Amos на Amiga, но не смог получить код, чтобы вставить его сюда, извините :)

person bokan    schedule 30.08.2012
comment
Здравствуйте, Бокан, спасибо за ответ. да, мне нужна помощь, но перед этим, если мы двигаемся вот так, мы можем получить эффект, подобный управлению полетом? в любом случае, пожалуйста, помогите мне, большое спасибо - person Appsunic; 30.08.2012

#include <math.h>

    CGFloat radius = 100;
    //CGFloat pi = 3.1415927; //comes for free in math.h

    UIBezierPath *basecircle = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0,0,radius*2,radius*2)];
    [[UIColor blackColor] set];
    [basecircle fill];

Это код для рисования bezierPath. Вам нужно реализовать это в методе drawRect. Надеюсь, поможет.

person Gypsa    schedule 30.08.2012