![]() |
Работа с массивом указателей
Вложений: 2
Приветствую Вас, Булочники)
Эта проблемма наверн элементарно решается... но пока Мне, ламеру за призванием, это еще трудно дается:sorry: В общем есть массив указателей в котором храняться адреса на обьекты - пули При выстреле новые пули добавляются в массив - это дает возможность обрабатывать их в главном цикле По истечении некоторого времени они самоуничтожаются - список сортируется так чтобы данную пулю "замять" т е заменить на следующую а последняя удаляется соответственно Дело в том что программа наверное постоянно попадает при обработке в главном цикле на "пустое место" в списке - потому и крашится Это уже чисто логическая задача но как Я уже писал выше - пока Мне такие проблемы решаются не спервого раза А в этом случае и не с второго и даже не с третьего Выкладываю два файла: первый - проект целиком второй - сам только код (для истинных джедаев (или просто интернет равликовый)) Помогите Пожалуйста и заранее Всем Вам гигантское Спасибо!!!) |
Ответ: Работа с массивом указателей
Запусти дебаггер и сразу найдешь причину краша.
Честно хотел помочь, но увидел код, испугался и забился в угол. |
Ответ: Работа с массивом указателей
Насколько Я не понял причина в обращении программы к пустой ячейке списка т е получаю неинициализированный обьект - пустой сосуд об который программа жалко спотыкается
Цитата:
Кстати - очень хотелось бы узнать Ваше Мнение о Моем коде - и заодно направить на Путь Истинный молодого бойца) |
Вложений: 1
Как глаголится на сия снг: "Пока не запостишь вопрос - ответ не свалит с твоего носа в твою зону видимости" (или тип того)
>O< Решение нашлось! - причем как и упоминалось в порвом посте - оно обидно-элементарное) Значит Моя тропинка к зарплате размером в 999 999 999уе остается для Меня тропинкой к зарплате в 999 999 999уе) йохохо Я пипец крутой! :В (это для Меня Подвиг - каждая решенная Мною проблема в С++ дает мне больше гормона счастья чем от 100500 выпусков +100500):punk: Проблема была в наркоманском удалении пули (см функцию killBullet) Прикрепляю исправленный рабочий вариант хедера И еще разочек: УУРРЯАААА!!!:compl: (пишу в отдельном посте потому что просто так) Оцените Мой код - за что заслуживаю похвалы и за что Меня можно убить - и вообще сам "проект" - т к первый раз делаю - не хочу запороться в самом начале Мне Очень Важно Ваше Мнение |
Ответ: Работа с массивом указателей
код в тег кода, а то всем влом качать !!
|
Ответ: Работа с массивом указателей
аффтар, есть отличные саеты, которые специализируются именно на том, чтобы можно было удобно прочитать код:
например pastebin.com |
Ответ: Работа с массивом указателей
Кроме того что убить надо за подпись, любовь к +100500 и смайлам стоило бы разделить все типы хотя бы по разным файлам. Хрен прочитаешь.
PS http://pastebin.com/T2XbZawm PPS Сначала int zsp,xsp,bsp,smosp; Потом: float zspf=zsp; zspf=zspf/100; float xspf=xsp; xspf=xspf/100;//хреново что в классе можно держать только целые числа :( Ох, так это классы во всем виноваты |
Ответ: Работа с массивом указателей
Цитата:
Цитата:
не знал про такую фишку Цитата:
2 - +100500 просто добавил к слову - если уже об этом заговорили - то видел Я его только 2 выпуска - не понравилось (а Мэддисон рулит) 3 - смайлы? О_О а чего тут плохого? Для чего созданы смайлы? Может для помощи в выражении эмоций? Не??? 4 - типы по файлам? Для двух базовых и трех производных классов??? 5 - Если есть "здравый" способ хранения не целых чисел в качестве переменной-члена или еще чего то милости прошу описать сие чудо И в общем : не будьте такими злобными >:) UPD: И вообще - не таких ответов Я ожидал |
Ответ: Работа с массивом указателей
Нормальная подпись. Не хуже моей.
__________________ ![]() |
Ответ: Работа с массивом указателей
Да не ну Я серьезно
(хотел написать длинное сообщ но...) :( |
Ответ: Работа с массивом указателей
Цитата:
2)... 4) В С++ нужно код класса разделять на *.h и *.cpp, в *.h хранятся только прототипы классов и функций, *.cpp объявляет их) 4) class Lol { public: float fScale; double dGpsW; ... |
Ответ: Работа с массивом указателей
Да, действительно, если что-то шевелится в подписи то мы похожи на труъ имиджборду
Я такой злой потому что целый день про*бался над кодом и не люблю обзорщиков на фоне ковра |
Ответ: Работа с массивом указателей
Цитата:
4) Спасибо, не знал 5) Кстати Я попробовал - и получилось! Для тебя это идиотизм но мне кто-то был сказал что можно добавлять в членны класса только целочисленные значиния или логические "були"! Павел - Спасибо за Дельный Ответ! Цитата:
|
Ответ: Работа с массивом указателей
итак:
1) жуткая каша - блиц стайл. про разделение на файлы уже говорили, рекомендую попробывать - забористая штука :) 2) индикаторы движения камеры должны лежать внутри камеры. 3) зачем ты хранишь id-шник внутри пули? 4) зачем ты сдвигаешь часть массива после удаленной пули? тебе важен порядок - нет. вот и меняй с последним. 5) Код:
float speed=sp; speed=speed/100; Код:
xMoveEntity(model,0,0,sp/100); Код:
int cBullet::getId()const{return id;} void cBullet::setId(unsigned int sid){id=sid;} ну и еще - класса, безполезнее чем cUnit я в жизни не видывал. почитай про виртуальные функции и абстрактные классы. в остальном все круто - переменные стараешься инициализировать в инициализаторах класса, константность логически константных функций соблюдаешь, лишнего в открытом доступе нет. видно, что книгу уже читал:) молодец. |
Ответ: Работа с массивом указателей
Цитата:
2) Ну Да) 3) А как еще узнать положение пули в массиве? 4) Да, это отличное решение, спасибо!) 5) Это было для того чтоб глаза мозолило по-сильнее - чтоб решение скорее нашлось) Как уже говорилось выше - Я не знал о возможности хранения членов любых типов в классе) А книжку пока-что только до половины дочитал - как идиот сразу рвусь в бой) Мне бы закрепить текущие знания - а потом уже и новые приобретать) Спасибо Большое за дельную критику и советы) И отдельно спасибо за похвалу - теперь прибавилось еще больше энтузиазма и тяги к работе!) |
Ответ: Работа с массивом указателей
3) Но ты же их как-то перебираешь (циклом)? Или возникает необходимость проверить случайную пулю отдельно?
Да и кстати, зачем надо знать какая это именно пуля? |
Ответ: Работа с массивом указателей
1) Именно так я и объяснял
3) for(int k = 0;k<10;k++) Переменная k... Она тебе ни о чем не говорит?? |
Ответ: Работа с массивом указателей
FireOwl, В самой пули есть маленький метод, который по истечению некоторого времени запускает глобольную функцию уничтожения пули - в нее то и передается идентификатор - с его помощью Мы знаем что где удалять) А как еще можно?
Может и можно использовать "delete this;" но ведь важно не нарушать целесность массива - с его помощью пули обрабатываются в главном цикле Если есть другой более праведный способ реализовать подобное (почему-то Я уверен что он есть) - то очень прошу тебя поделится ним) Павел, 3) К сожелению, нет( Может обьяснишь? |
Ответ: Работа с массивом указателей
Понятно.
Я бы вынес этот метод в глобальный перебор пуль, а "внутри" пули оставил только счетчик времени. Ну или вообще удалял пулю после преодоления определенного расстояния между ней и игроком. |
Ответ: Работа с массивом указателей
Цитата:
Цитата:
есть метод обработки пули (который перемещает пулю, оставляет от нее трейсер, свистит и пердит, просверливает дырку в голове противника, оставляет декаль на стене) есть метод обработки пуль (который менеджерит пули. скорее всего ето сведется к вызову метода Gear для каждой пули из списка. Однако никто не мешает обработать результат этого метода. Почему бы не возвращать ему 1-цу если пуля есть и 0 - если она уже сдохла(неважно как: просверлив дырку, оставив декаль или свиснув). пуля не должна НИКАК влиять на список. |
Ответ: Работа с массивом указателей
Цитата:
Код:
for(int k = 0;k<MAX_BULLETS;k++) |
Ответ: Работа с массивом указателей
Спасибо Всем за Хорошие Ответы!)
Принял во внимание все Ваши советы и прямие указания - уже аж стыдно стало - потому убегаю в оффлайн - следующая созданная мною тема уже надеюсь будет посвящена самой "игре") Но тему не закривайте т к чувствую что она еще Мне пригодится) |
Ответ: Работа с массивом указателей
Маленький вопросик:
Код:
class cObject{}; |
Ответ: Работа с массивом указателей
Вопрос как-то топорно поставлен.
Удалится то все, но декструктор будет вызван только ~cObject, а не ~cDecor, как тебе, вероятно, хотелось бы. ЗЫ. Вообще такие вещи самому проверить можно в течении 1 минуты. |
Ответ: Работа с массивом указателей
|
Ответ: Работа с массивом указателей
Спасибо)
Еще один вопросик: Сегодня начал делать самопальный интерфейс для редактора Есть уже пародия на окна и объекты в них (кнопочки) Мне интересно как сделать возможным нацеплять на объекты действия (например создание нового окна или закрытие) которые выполняются при каком-либо ключевом действии (например нажатие по кнопке окна) Пробую сейчас ссылки на функции - но мягко говоря получается фигня - даже объяснять не буду - мозги уже взорвались Суть вопроса: можно ли как-то еще сделать это? Помогите Пожалуйста Мне собрать Мой Мозг обратно) UPD: main->OnClick(DUI*(*fuuuck)(DUI*)); error C2059: синтаксическая ошибка: ) |
Ответ: Работа с массивом указателей
Код:
OnClick(DUI*(*fuuuck)(DUI*)); надо так: Код:
DUI * somemethod(DUI *value) |
Ответ: Работа с массивом указателей
HolyDel, Спасибо!
Короче на данный момент решил использовать простые else_if (but->pressed) {but->pressed = false; blablabla;} Начал Все переписывать заново) Но вот получилась незадачка: Код:
typedef unsigned short int usi; Цитата:
|
Ответ: Работа с массивом указателей
вообще православные люди делают так:
Код:
class Button |
Ответ: Работа с массивом указателей
ммм
а зачем наследовать экшн от кнопки? и еще: а если надо работать с текущими обьектами - только-что созданными в Мейн? С Вашем вариантом можно только закрывать окна и открывать новые лучше уже функции пересылать через ссылки или просто скостылять отдельный класс Экшн или Я не правильно трактовал Ваш совет? |
Ответ: Работа с массивом указателей
по твоей проблеме:
DBase* DGui::DGuiList[MAX_DGUI_SIZE] = {}; напиши в cpp-шнике. Цитата:
можно и функции отсылать. но как правило функции нужны какие нибудь данные. удобнее когда эти дополнительные данные хранятся в самом вызове. вообще есть книга Стива Дьюхерста -Священные знания С++. там неплохо давалась проблема обратных вызовов. советую почитать. |
Ответ: Работа с массивом указателей
Спасибо тебе большущее!
В книжке ничего не было сказано о таком "определении" массива указателей( Если бы не ты то эта проблема наверное так и не решилась бы И за "Священные знания С++" Спасибо!:compl: Святой ты человек, HolyDel) А на счет кнопок Я решил вешать Все действия на сами окна с помощью ссылок на функции (которые будут принимать адрес вызывающего окна) - а кнопки стали лишь Кнопками) И еще раз спасибо! |
Ответ: Работа с массивом указателей
Два вопросика по теме С++:
1 - Как избавится от надоедливых предупреждений от функций типа strcpy и strcat ? Есть ли аналоги? 2 - В англицком Я ни бум-бум - что за чудо такое - windows symbol package? И какие еще есть полезности для истинного и не очень программиста? |
Ответ: Работа с массивом указателей
MSVS?
strcpy_s strcat_s windows symbol package - не слышал, покажи контекст в котором студия их пишет. вообще всякие symbol package это либо для отладки информация, либо для внешнего интерфейса библиотек. насколько я знаю. |
Ответ: Работа с массивом указателей
Спасибо - теперь окошко вывода стало намного чище)
Мож кинуть ссыль где есть польный список таких безопасных функций? На данный момент осталось избавиться еще от stricmp и все) windows symbol package - где-то увидел статейку в которой в двух строках упоминалось о нем - вроде как это чудо помогает отловить ошибки типа "обращение по неправильному адресу памяти" - указывает на виноватую строку в исходнике Вот и спрашиваю у знающих английский - что это такое (и Мне расскажут - и себе мож чего полезного найдут) |
Ответ: Работа с массивом указателей
Форумчани - что значит следующая запись?
void ggg(int a = 3 | 5){} Просто не знаю как в гугле запрос оформить :-D UPD: еще вопросик))) Код:
int * hhh = new int[2]; Код:
delete hhh[]; |
Ответ: Работа с массивом указателей
delete [] hhh;
int a = 3 | 5 читай про работу с битами имеется xxxxx и 000NN. xxxxx & 11100 -> xxx00; xxx00 | 000NN -> xxxNN; |
Ответ: Работа с массивом указателей
массивы созданные оператором new[], удаляются оператором delete[],
например, delete[] myArray; void ggg(int a = 3 | 5){} функция без возвращаемого значения под именем ggg получает параметр типа int, в качестве которого передаётся переменная создаваемая в этом же месте. Под именем a, и значением являющемся результатом выражения (3 | 5); |
Ответ: Работа с массивом указателей
Цитата:
|
Ответ: Работа с массивом указателей
Цитата:
|
Ответ: Работа с массивом указателей
Спасибо за пояснения!)
|
Ответ: Работа с массивом указателей
так пишут негодяи.
обычно вместо 3 (чего ТРИ?) или 5 (чего ПЯТЬ?) идут какие то осмысленные флаги. ито они, обычно не перекрывают биты друг друга как в этом случае. т.е. 0 1<<1 1<<2 1<<3 .. 1<<n степень двойки вобщем чтобы была |
Ответ: Работа с массивом указателей
Цитата:
|
Часовой пояс GMT +4, время: 20:40. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot