Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 26.10.2011, 00:42   #16
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Работа с массивом указателей

3) Но ты же их как-то перебираешь (циклом)? Или возникает необходимость проверить случайную пулю отдельно?
Да и кстати, зачем надо знать какая это именно пуля?
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Старый 26.10.2011, 00:51   #17
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Работа с массивом указателей

1) Именно так я и объяснял
3) for(int k = 0;k<10;k++)
Переменная k... Она тебе ни о чем не говорит??
(Offline)
 
Ответить с цитированием
Старый 26.10.2011, 00:53   #18
ANIK123
Знающий
 
Аватар для ANIK123
 
Регистрация: 29.11.2010
Сообщений: 244
Написано 31 полезных сообщений
(для 49 пользователей)
Ответ: Работа с массивом указателей

FireOwl, В самой пули есть маленький метод, который по истечению некоторого времени запускает глобольную функцию уничтожения пули - в нее то и передается идентификатор - с его помощью Мы знаем что где удалять) А как еще можно?
Может и можно использовать "delete this;" но ведь важно не нарушать целесность массива - с его помощью пули обрабатываются в главном цикле
Если есть другой более праведный способ реализовать подобное (почему-то Я уверен что он есть) - то очень прошу тебя поделится ним)

Павел, 3) К сожелению, нет( Может обьяснишь?
__________________
Intel Core i3-4005U (1.7 ГГц), 4 ГБ ОЗУ, nVidia GeForce 940M 4 ГБ, Win8.1
(Offline)
 
Ответить с цитированием
Старый 26.10.2011, 01:01   #19
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Работа с массивом указателей

Понятно.
Я бы вынес этот метод в глобальный перебор пуль, а "внутри" пули оставил только счетчик времени. Ну или вообще удалял пулю после преодоления определенного расстояния между ней и игроком.
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ANIK123 (26.10.2011)
Старый 26.10.2011, 01:06   #20
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Работа с массивом указателей

3) А как еще узнать положение пули в массиве?
а зачем его узнавать? даже если тебе так уж уперся етот id, то почему бы просто не открыть к нему доступ. подумай сам - твои тривиальные сеттеры и геттеры ничуть не лучше открытого доступа. только более многословны. запомни - лучший код, это тот который не написан. если есть возможность не писать - не пиши.

В самой пули есть маленький метод, который по истечению некоторого времени запускает глобольную функцию уничтожения пули - в нее то и передается идентификатор - с его помощью Мы знаем что где удалять) А как еще можно?
ты мешаешь мух с котлетами. (объекты с их менеджером)
есть метод обработки пули (который перемещает пулю, оставляет от нее трейсер, свистит и пердит, просверливает дырку в голове противника, оставляет декаль на стене)
есть метод обработки пуль (который менеджерит пули. скорее всего ето сведется к вызову метода Gear для каждой пули из списка. Однако никто не мешает обработать результат этого метода. Почему бы не возвращать ему 1-цу если пуля есть и 0 - если она уже сдохла(неважно как: просверлив дырку, оставив декаль или свиснув). пуля не должна НИКАК влиять на список.


спасибо. удача нам пригодится
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ANIK123 (26.10.2011)
Старый 26.10.2011, 01:08   #21
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Работа с массивом указателей

Сообщение от ANIK123 Посмотреть сообщение
FireOwl, В самой пули есть маленький метод, который по истечению некоторого времени запускает глобольную функцию уничтожения пули - в нее то и передается идентификатор - с его помощью Мы знаем что где удалять) А как еще можно?
Может и можно использовать "delete this;" но ведь важно не нарушать целесность массива - с его помощью пули обрабатываются в главном цикле
Если есть другой более праведный способ реализовать подобное (почему-то Я уверен что он есть) - то очень прошу тебя поделится ним)

Павел, 3) К сожелению, нет( Может обьяснишь?
Ок, int Update() - это будет метод, который вернет 1 в случае необходимости удалить пулю, а так же по ходу отрисует ее, и произведет все действия рассчетные. Потом делаем так:
for(int k = 0;k<MAX_BULLETS;k++)
   if(pbBullets[k])
   if(pbBullets[k]->Update())
   {
      delete pbBullets[k];
      pbBullets[k] = 0;
   }
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ANIK123 (26.10.2011)
Старый 26.10.2011, 01:09   #22
ANIK123
Знающий
 
Аватар для ANIK123
 
Регистрация: 29.11.2010
Сообщений: 244
Написано 31 полезных сообщений
(для 49 пользователей)
Ответ: Работа с массивом указателей

Спасибо Всем за Хорошие Ответы!)
Принял во внимание все Ваши советы и прямие указания - уже аж стыдно стало - потому убегаю в оффлайн - следующая созданная мною тема уже надеюсь будет посвящена самой "игре")
Но тему не закривайте т к чувствую что она еще Мне пригодится)
__________________
Intel Core i3-4005U (1.7 ГГц), 4 ГБ ОЗУ, nVidia GeForce 940M 4 ГБ, Win8.1
(Offline)
 
Ответить с цитированием
Старый 12.11.2011, 15:44   #23
ANIK123
Знающий
 
Аватар для ANIK123
 
Регистрация: 29.11.2010
Сообщений: 244
Написано 31 полезных сообщений
(для 49 пользователей)
Ответ: Работа с массивом указателей

Маленький вопросик:
class cObject{};
class cDecor : public cObject{};

cDecor* bugaga = new cDecor();
cObject* objects[1];
objects[0] = bugaga;

delete objects[0];
что произойдет? удалится все содержимое bugaga или только то что принадлежит cObject?
__________________
Intel Core i3-4005U (1.7 ГГц), 4 ГБ ОЗУ, nVidia GeForce 940M 4 ГБ, Win8.1
(Offline)
 
Ответить с цитированием
Старый 12.11.2011, 16:02   #24
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: Работа с массивом указателей

Вопрос как-то топорно поставлен.
Удалится то все, но декструктор будет вызван только ~cObject, а не ~cDecor, как тебе, вероятно, хотелось бы.
ЗЫ. Вообще такие вещи самому проверить можно в течении 1 минуты.
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ANIK123 (12.11.2011)
Старый 12.11.2011, 20:17   #25
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Работа с массивом указателей

виртуальный декструктор
(Offline)
 
Ответить с цитированием
Старый 14.11.2011, 23:10   #26
ANIK123
Знающий
 
Аватар для ANIK123
 
Регистрация: 29.11.2010
Сообщений: 244
Написано 31 полезных сообщений
(для 49 пользователей)
Смех Ответ: Работа с массивом указателей

Спасибо)

Еще один вопросик:
Сегодня начал делать самопальный интерфейс для редактора
Есть уже пародия на окна и объекты в них (кнопочки)
Мне интересно как сделать возможным нацеплять на объекты действия (например создание нового окна или закрытие) которые выполняются при каком-либо ключевом действии (например нажатие по кнопке окна)
Пробую сейчас ссылки на функции - но мягко говоря получается фигня - даже объяснять не буду - мозги уже взорвались
Суть вопроса: можно ли как-то еще сделать это?
Помогите Пожалуйста Мне собрать Мой Мозг обратно)

UPD:
main->OnClick(DUI*(*fuuuck)(DUI*));
error C2059: синтаксическая ошибка: )

HolyDel, как там ТЭФИ 2011?)
__________________
Intel Core i3-4005U (1.7 ГГц), 4 ГБ ОЗУ, nVidia GeForce 940M 4 ГБ, Win8.1
(Offline)
 
Ответить с цитированием
Старый 15.11.2011, 01:18   #27
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Работа с массивом указателей

OnClick(DUI*(*fuuuck)(DUI*));
это объявление.

надо так:
DUI * somemethod(DUI *value)
{
}

main->OnClick(somemethod);

проекты поедут тока 19-го. результаты будут вообще тока в мае известны.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ANIK123 (15.11.2011)
Старый 15.11.2011, 19:56   #28
ANIK123
Знающий
 
Аватар для ANIK123
 
Регистрация: 29.11.2010
Сообщений: 244
Написано 31 полезных сообщений
(для 49 пользователей)
Смущение Ответ: Работа с массивом указателей

HolyDel, Спасибо!
Короче на данный момент решил использовать простые else_if (but->pressed) {but->pressed = false; blablabla;}
Начал Все переписывать заново)
Но вот получилась незадачка:
typedef unsigned short int usi;
const usi MAX_DGUI_SIZE(1024);

class DGui{
public:
	static cDWindow* CreateDWindow(usi pos_x, usi pos_y);

	static cDBase* DGuiList[MAX_DGUI_SIZE];
	static usi dgui_num;
};

usi DGui::dgui_num = 0;

cDWindow* DGui::CreateDWindow(usi pos_x, usi pos_y){
	cDWindow* win = new cDWindow(pos_x, pos_y);
	dgui_num++; DGuiList[dgui_num] = win;
	return win;
}
ЗЫ: cDBase является базовым для cDWindow
неразрешенный внешний символ ""public: static class cDBase * * DGui::DGuiList" (?DGuiList@DGui@@2PAPAVcDBase@@A)"
Я же ведь просто обращаюсь статической функцией к статическому массиву и переменной одного класса О_О
Фкуссное ожидание)))
__________________
Intel Core i3-4005U (1.7 ГГц), 4 ГБ ОЗУ, nVidia GeForce 940M 4 ГБ, Win8.1
(Offline)
 
Ответить с цитированием
Старый 15.11.2011, 21:06   #29
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Работа с массивом указателей

вообще православные люди делают так:

class Button
{
public:
	struct Action
	{
		virtual void action() = 0;
	};
private:
	Action *action;
public:
	void onAction(Action *act)
	{
		action = act;
	}

	void Action()
	{
		action->action();
	}
};

struct ToStdCOutAction : Button::Action
{
	virtual void action()
	{
		std::cout<<"нажали на кнопку"<<std::endl;
	}
};

int main()
{
	Button *but = new Button();
	but->onAction(new ToStdCOutAction());
	but->Action();
return 0;
}
(Offline)
 
Ответить с цитированием
Старый 15.11.2011, 21:23   #30
ANIK123
Знающий
 
Аватар для ANIK123
 
Регистрация: 29.11.2010
Сообщений: 244
Написано 31 полезных сообщений
(для 49 пользователей)
Ответ: Работа с массивом указателей

ммм
а зачем наследовать экшн от кнопки?
и еще: а если надо работать с текущими обьектами - только-что созданными в Мейн? С Вашем вариантом можно только закрывать окна и открывать новые
лучше уже функции пересылать через ссылки или просто скостылять отдельный класс Экшн
или Я не правильно трактовал Ваш совет?
__________________
Intel Core i3-4005U (1.7 ГГц), 4 ГБ ОЗУ, nVidia GeForce 940M 4 ГБ, Win8.1
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 11:50.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com