Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2014, 15:53   #21
niixon
Пользователь
 
Регистрация: 03.08.2012
Сообщений: 23
По умолчанию

6.2 Устанавливаем начальные координаты снаряда
Код:
// достаем размеры экрана
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
// создаем спрайт со снарядом
CCSprite *projectile = CCSprite::create("projectile-hd.png", CCRectMake(0, 0, 20, 20));
// устанавливаем позицию, по x = 20, по у = ширина экрана / 2(получается середина)
projectile->setPosition( ccp(20, winSize.height/2) );
// устанавливаем Тэг 2(снаряд)
projectile->setTag(2);
// добавляем снаряд в массив снарядов
_projectiles->addObject(projectile);

6.3 Determinie offset of location to projectile
Код:
/*вот это я не очень понимаю... логично перевести не смог.
location - это координата нажатия, достаем из этой переменной координату по иксу и отнимаем от нее координату по иксу нашего снаряда
(это координата появления снаряда). Такая же операция и с координатой по у. И что мы этим добились? Логика какая?*/
int offX = location.x - projectile->getPosition().x;
int offY = location.y - projectile->getPosition().y;
Цитата:
// определяем смешение координат снаряда
Вот как-то так наверное это можно назвать


6.4 Проверка и добавление
Код:
// Выходим из функции если выстрелили вниз или назад
if (offX <= 0) return;
// Добавляем на экран снаряд
this->addChild(projectile);

6.5 Determine where we wish to shoot the projectile to

Код:
// здесь я не очень понимаю... помогите логику действий выяснить.
// ширина экрана + ширина спрайта / 2. для чего?
int realX = winSize.width + (projectile->getContentSize().width/2);
// здесь тоже не понятно, т.к не понял, что хранится в этих переменных
float ratio = (float)offY / (float)offX;
// что получается здесь?
int realY = (realX * ratio) + projectile->getPosition().y;
// и в итоге 
CCPoint realDest = ccp(realX, realY);
В общем тут надо разобраться, для чего все это...


6.6 Определяем как далеко вы выстрелили

Код:
// здесь тоже, было бы здорово каждую строчку прокоментить
int offRealX = realX - projectile->getPosition().x;
int offRealY = realY - projectile->getPosition().y;
float length = sqrtf((offRealX * offRealX) + (offRealY*offRealY));
float velocity = 480/1; // 480pixels/1sec
float realMoveDuration = length/velocity;

6.7 Двигаем снаряд в конечную точку
Код:
projectile->runAction(CCSequence::create(CCMoveTo::create( realMoveDuration, realDest), CCCallFuncN::create(this, callfuncN_selector(HelloWorld::spriteMoveFinished)), NULL));
realMoveDuration - скорость перемещения
realDest - CCPoint, координаты, куда будет перемещаться спрайт. так?
И как только он туда переместиться, вызовется функция удаления спрайта.
niixon вне форума Ответить с цитированием
Старый 06.01.2014, 22:35   #22
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

Ох же ж блин...
Давайте так: не надо писать километры текста, за ними теряются все вопросы. При этом на подавляющее большинство этих вопросов вы можете найти ответ самостоятельно. Размышления - это, конечно, супер. Правильность этих размышления можно проверить в документации к кокосу. Повторюсь, я не являюсь программистом, использующим кокос. Единственное столкновение с ним - это эти уроки.

Цитата:
по каким-то причинам, программа понимает какой именно объект надо удалить
По тем причинам, что мы в цикле говорим ему, какой таргет удалить: CCSprite * target = *jt;, а сам таргет берется из массива таргетов, которые надо удалить.

Цитата:
Это первый параметр в функции, а для чего второй параметр?
А вы сами как думаете? Давайте развивать логику. Что такое Rect? Прямоугольник. Вероятно, это прямоугольник, для задания координат и размеров картинки относительно имейджа.

Цитата:
устанавливаем позицию появления на сцене, или на слое? Или на экрана?
Следующую строку вы прочитали?
this->addChild(player);
То есть игрока мы чайлдим к нашему классу, который наследован от класса слоя. И все координаты причалденых к нему объектов будут относительно него.

Цитата:
Мы обращаемся к переменной width(ширина), это ширина нашего спрайта? и делим ее на пополам. Для чего?
А это уже начинает раздражать. До кода там была картинка с объяснением, для чего делается деление пополам.

Цитата:
Но дальше непонятнее всего, все эти значения передаются в параметры метода ccp. Что он возвращает? Для чего он?
Снова включаем логику и смотрим, что принимает функция. Точку. То бишь Поинт. У нас два целочисленных значения, а не поинт. Следовательно, их нужно перевести в поинт. Можно наверняка создать какой-то поинт с этими значениями, но автору кода показалось разумнее перевести их в поинт вот таким вот образом.

Короче. Давайте так: вы читаете код, вдумываясь в него. Непонятные классы хотя бы переводите транслейтором, чтоб понять, что CCPoint - это класс точки. И тому подобное. А то ваши вопросы похожи не на "хочу все знать", а "разжуйте за меня, проглотите, переварите, а я посижу посмотрю". Вообще у меня такое чувство, что я дала вам пирожок, а вы вместо того, чтоб есть его, начинаете выпытывать. Причем не из сего он сделан и как приготовить, а почему у пирожка первая буква "п", а почему она пишется двумы вертикальными палками и одной горизонтальной... и т.п.

Если хотите получить ответы на вопросы, я советую вам писать не:
Цитата:
3. Функция HelloWorld::init()

Эта функция вызывается при старте программы, в ней происходит инициализация переменных, создание белого фона, загрузка спрайта с игроком, вызов нужных нам функций.
Вопрос: Эта функция выполняется постоянно с какой-то частотой? Или она запускается 1 раз? В этой функции вызывается метод update(), его надо вызывать очень часто, чтобы отследить столкновение. Получается, что функция init(), вызывается постоянно в каком-то цикле? Но если она постоянно вызывается... в ней каждый раз пересоздаются все переменные и постоянно выделяется память под наши массивы(цели и пули).

_targets = new CCArray;
_projectiles = new CCArray;

... но эти переменные нельзя в каждом кадре пересоздавать. Ведь это массивы объектов и они заполняются данным.
а

Цитата:
как часто вызывается функция HelloWorld::init()?
Читать килотонны размышлений и искать в них реальные вопросы у меня нет времени.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 06.01.2014, 23:19   #23
niixon
Пользователь
 
Регистрация: 03.08.2012
Сообщений: 23
По умолчанию

Цитата:
Читать килотонны размышлений и искать в них реальные вопросы у меня нет времени.
Ничего страшного, я отвечу на все свои вопросы сам и подкорректирую все посты. Новичкам, которые захотят разобраться, будет проще.

Цитата:
Короче. Давайте так: вы читаете код, вдумываясь в него. Непонятные классы хотя бы переводите транслейтором, чтоб понять, что CCPoint - это класс точки. И тому подобное. А то ваши вопросы похожи не на "хочу все знать", а "разжуйте за меня, проглотите, переварите, а я посижу посмотрю". Вообще у меня такое чувство, что я дала вам пирожок, а вы вместо того, чтоб есть его, начинаете выпытывать. Причем не из сего он сделан и как приготовить, а почему у пирожка первая буква "п", а почему она пишется двумы вертикальными палками и одной горизонтальной... и т.п.
Я так не делал. Вам показалось. Я старался на все вопросы ответить сам и в итоге почти на все я ответил в остальных постах. Спрашивая про простые классы, я не имел в виду банальщину, которая понятна по названию, а более серьезные вопросы: какие есть методы, где и как используются. То что это точка это и ежу понятно.

Да где-то есть вопросы, глупые и детские, очень жаль, что вы обговнякали, я очень старался разобраться и объяснить все, что понял и спросить все, что не понял. Если у вас нет времени, то не надо мне помогать. Очень не приятно читать нервозные и обидные сообщения. Спасибо.

Последний раз редактировалось niixon; 06.01.2014 в 23:32.
niixon вне форума Ответить с цитированием
Старый 07.01.2014, 16:28   #24
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

Цитата:
какие есть методы, где и как используются.
Какие есть методы у любого класса можно узнать, поставив точку рядом с экземпляром этого класса.

Я не вижу ничего обидного в моем сообщении. То, что вы что-то поняли - это круто и отлично. Возможно, это вполне кому-то поможет, кто прочитает. Но при этом вы забыли, что нужно уважать читающего. Новички не будут руководствоваться объяснениями, в которых есть вопросы. Также новички не будут искать на 10-й странице форума ваш ответ на вами же заданный вопрос. Если хотите сделать добро, то свои размышления, которые соответствуют действительности, нужно писать в одном сообщении (ну или в непрерыввной кучке сообщений), а свои вопросы - в другом сообщении или непрерывной кучке сообщений). Или хотя бы сообщение с вопросом - а за ним должно быть сообщение с ответом. Даже если вы сам будете себе отвечать, то читать это весьма неудобно. Это вы знаете, что ответ на вопрос сообщения номер 13 находится в сообщении номер 55, а другому читающему человеку придется читать все 55 сообщений, чтоб найти его.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 26.02.2014, 13:55   #25
mav1
Новичок
Джуниор
 
Регистрация: 26.02.2014
Сообщений: 1
По умолчанию

Товарищи, подскажите начинающему кокосовику. Вот скачал я движок, версия 2.2.2. В нем надо запустить файлы для установки: build-win32.bat , install-templates-msvc.bat - для установки шаблонов. Но в движке нет файла install-templates-msvc.bat. Как сделать чтобы у меня (visual studio 2010) можно было создать новый кокосовый проект? (То есть было в меню - create cocos 2d-x project). Спасибо!

p.s. если вдруг кто захочет ответить на мыло - mav1creator@mail.ru
mav1 вне форума Ответить с цитированием
Старый 22.04.2016, 15:51   #26
santalix
Новичок
Джуниор
 
Регистрация: 21.04.2016
Сообщений: 1
По умолчанию

niixon,ACE Valery,
Я понимаю, что теме миллион лет, но все же, почему возникают такие ошибки?

Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка C3248 cocos2d::Layer::ccTouchesEnded: функцию, объявленную как "final", нельзя переопределить с помощью "HelloWorld::ccTouchesEnded" (компилируется исходный файл ..\Classes\AppDelegate.cpp) MyGame c:\cocos2d-x-3.10\project\mygame\classes\hellowo rldscene.h 17
Ошибка C3248 cocos2d::Layer::ccTouchesEnded: функцию, объявленную как "final", нельзя переопределить с помощью "HelloWorld::ccTouchesEnded" (компилируется исходный файл ..\Classes\HelloWorldScene.cpp) MyGame c:\cocos2d-x-3.10\project\mygame\classes\hellowo rldscene.h 17
Ошибка C2671 HelloWorld::spriteMoveFinished: статические функции-члены не имеют указателей "this" MyGame c:\cocos2d-x-3.10\project\mygame\classes\hellowo rldscene.cpp 64
Ошибка C2440 static_cast: невозможно преобразовать "void (__thiscall HelloWorld::* )(void)" в "cocos2d::SEL_CallFuncN" MyGame c:\cocos2d-x-3.10\project\mygame\classes\hellowo rldscene.cpp 55
Ошибка C2440 static_cast: невозможно преобразовать "void (__thiscall HelloWorld::* )(void)" в "cocos2d::SEL_CallFuncN" MyGame c:\cocos2d-x-3.10\project\mygame\classes\hellowo rldscene.cpp 105
Ошибка C2511 void HelloWorld::spriteMoveFinished(coco s2d::CCNode *): перегруженная функция-член не найдена в "HelloWorld" MyGame c:\cocos2d-x-3.10\project\mygame\classes\hellowo rldscene.cpp 61
Ошибка C2227 выражение слева от "->removeChild" должно указывать на тип класса, структуры или объединения либо на универсальный тип MyGame c:\cocos2d-x-3.10\project\mygame\classes\hellowo rldscene.cpp 64
Ошибка (активно) невозможно переопределить final функцию "cocos2d::Layer::ccTouchesEnded " (объявлено в строке 79 из "c:\cocos2d-x-3.10\Project\MyGame\cocos2d\cocos\2 d\CCLayer.h") MyGame c:\cocos2d-x-3.10\Project\MyGame\Classes\HelloWo rldScene.h 17
Ошибка (активно) объявление несовместимо с "void HelloWorld::spriteMoveFinished(<err or-type> *sender)" (объявлено в строке 15 из "c:\cocos2d-x-3.10\Project\MyGame\Classes\HelloWo rldScene.h") MyGame c:\cocos2d-x-3.10\Project\MyGame\Classes\HelloWo rldScene.cpp 60
Ошибка C2061 синтаксическая ошибка: идентификатор "CCNode" (компилируется исходный файл ..\Classes\AppDelegate.cpp) MyGame c:\cocos2d-x-3.10\project\mygame\classes\hellowo rldscene.h 15
Ошибка C2061 синтаксическая ошибка: идентификатор "CCNode" (компилируется исходный файл ..\Classes\HelloWorldScene.cpp) MyGame c:\cocos2d-x-3.10\project\mygame\classes\hellowo rldscene.h 15
santalix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка игр Kaddok Свободное общение 6 18.05.2012 22:06
Разработка социальных игр tfe2012 Фриланс 0 23.08.2011 18:57
разработка игр на Python OrcXCyber Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 24.03.2011 10:26
Требуются талантливые люди. Разработка PC-игр. zzzAleXzzz Фриланс 2 22.01.2011 23:09
разработка онлайн-игр dvizzz Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 18.06.2010 23:52