Я пытаюсь создать игру с ньютоновской физикой.
Прежде чем вы прочитаете остальную часть этого, это мой главный вопрос, на который я пытаюсь найти ответ:
- Я продолжаю получать сообщение об ошибке, которое появляется в окне после попытки запуска кода. Какую библиотеку или DLL мне не хватает?
У меня есть яблоко, апельсин и карандаш. Я прочитал большую часть документации с помощью движка физики пули, но я просто не могу заставить яблоко вести себя как лист бумаги (2d-ish). Физические движки Box2d и такие не то, что я хочу. Я не люблю коробки в реальной жизни, не говоря уже о кибермирах.
Я хочу, чтобы яблоко упало на землю, качаясь взад-вперед, как лист бумаги. Этот сайт дал некоторую полезную информацию, которую я интегрировал в свой код: htp: //www.3dbuzz.com/vbforum/showthread.php? 50854-Please-HELP !! -Simulating-paper-float-to-ground
У меня есть идея для игры, в которой вы заставляете объекты вести себя как другие типы объектов, но мои симуляции игры просто не работают.
Я прошел через слишком много типов яблок, чтобы сосчитать, и ни одно из них даже близко не подошло. Я пытался найти других людей, которые пробовали похожие вещи (используя googles, такие как http://lmgtfy.com/?q=simluating+game+apples+in+real+life ), но яблоки никогда не возвращались!
Таким образом, я думаю, что я ухожу на новую территорию здесь (не волнуйтесь, я открою исходные тексты моих методов), и именно поэтому у меня просто ничего не получается.
Я пробовал программировать разные виды яблок, но, может быть, мне нужно кибер яблоко? Я не знаю, где взять один из них, может быть, в таком месте, как это: http://cyberapples.com/ Хотя этот сайт пока закрыт - он говорит только о каком-то мусорном ведре cgi или о чем-то подобном . Любые советы по этому вопросу?
Это часть моего кода, которая имеет дело с яблоком, имитирующим игровой материал:
///... /* setup other objects in the room and other stuff */ ...
// see http://www.orangepippin.com/apples/arlet-swiss-gourmet
// for more arlet apple details
paper_2d_behaving_apple = new ArletApple[);
/ setup the arlet apple's general characteristics
paper_2d_behaving_apple.species = SPECIES.MALUS_DOMESTICA;
paper_2d_behaving_apple.parentage = PARENTAGE.GOLDEN_DELICIOUS_X_IDARED:
paper_2d_behaving_apple.introduced = make_year(1958);
paper_2d_behaving_apple.fruitColor = COLORS.red;
paper_2d_behaving_apple.fleshCOlor = APPLE_FLESH_COLORS::CREAM;
paper_2d_behaving_apple.fruitSize = GENERIC_FRUIT_SIZES.MEDIUM;
paper_2d_behaving_apple.GoodFor.add("eating fresh");
paper_2d_behaving_apple.GoodFor.add("cooking");
paper_2d_behaving_apple.GoodFor.add("use / keeping: 3 months or more");
paper_2d_behaving_apple.GoodFor.add("ripening PERIOD: 3 months or more");
paper_2d_behaving_apple.diseaseResistances = [DISEASE_RES::SCAB, DISEASE_RES::MILDEW];
///... (I cut some of this out for brevity's sake) ...
///* setup this specific apple's characteristics
paper_2d_behaving_apple.base_color = 0xff2000;
paper_2d_behaving_apple.bumpMap = BUMP_MAP_APPLE;
paper_2d_behaving_apple.texture = TEXTURE_REALISTIC_APPLE;
paper_2d_behaving_apple.feel_texture = SMOOTH;
paper_2d_behaving_apple.has_small_orangey_stripes = TRUE;
paper_2d_behaving_apple.DoesntHaveStem = FALSE;
paper_2d_behaving_apple.juicy = true; // needs a lowercase true for some reason
paper_2d_behaving_apple.has_bugs = false; // heck no it doesn't, I only buy good apples
///... (again I cut some stuff out so this post would'n't be too long) ...
// from http://www.3dbuzz.com/vbforum/showthread.php?50854-Please-HELP!!-Simulating-paper-floating-to-ground
// "i think reactor can do this, i would try cloth witha high air resistance and a very high stifness"
paper_2d_behaving_apple.addReactor(REactor());
// got this technique from http://www.gimptutorials.eu/html/clothify_filter_gimp_gnu.html
import gimp ; GIMP::Clothify(paper_2d_behaving_apple); pass
// / 7 should be high enough - it's a big number
paper_2d_behaving_apple.reactor.stiffness = 7.0f;
paper_2d_behaving_apple.reactor.airResistance = 5.0f; // high, but not "very high"
// setup the world the apple exists in
paper_2d_behaving_apple.owner = new BobFlanderson();
paper_2d_behaving_apple.owner.appearance = APPEARANCE_AWESOME;
paper_2d_behaving_apple.owner.clothes.size = CLOTHES_SIZE_MEDIUM;
paper_2d_behaving_apple.owner.owns_house = false;
paper_2d_behaving_apple.owner.apartment.sucks = true;
paper_2d_behaving_apple.owner.has_wife = false;
paper_2d_behaving_apple.viewSpace = LIVING_ROOM;
paper_2d_behaving_apple.RESTINGon = Kitchen.GetSurfaces()->COUNTER_BY_STOVE;
////... (also cut some more out here too) ...
// transform the paper behaving apple into something viewable
view_matrix = new ViewMatrix();
view_matrix.DoTransformation(paper_2d_behaving_apple);
view_matrix.makeViewable();
World->ApplyViewMatrix(view_matrix);
paper_2d_behaving_apple.RenderToNeakedEye();
// THIS IS WHERE I'm HAVING THE TROUBLE
actual_existing_apple_on_myCounter = new ExistingApple(paper_2d_behaving_apple);
actual_existing_apple_on_myCounter.bindInRealLive();
// THIS NEVER WORKS! I DON"T KNOW HOW YOU GUYS DO THIS STUFF!
actual_existing_apple_on_myCounter.Translate(LANGUAGES::ENGLISH);
// saw the IW_FIXED on some jam making site
// (http://www.madewithmarmalade.com/devnet/documentation#/api/api/group__IwGeomCore.html)
// - that's the closest I've come to seeing anything close to what
// I'm trying to do
actual_existing_apple_on_myCounter.TranslateTo(0, 0, IW_FIXED(10.0f));
apple_now_inAir = actual_existing_apple_on_myCounter;
// I know this is C++ code, but some ruby sites were saying that it's best
// to put an exclamation point after a function that modifies a physical
// object - no luck yet for me
apple_now_inAir.Drop!();
Как вы можете видеть, у меня есть основные понятия, и я очень описательно с именами моих переменных и атрибутами объекта. Я настроил мир очень кратко и четко, хотя я упростил мир в игре по сравнению с реальной кухней.
Я думаю, что проблема заключается в том, paper_2d_behaving_apple
чтобы actual_existing_apple_on_myCounter
привязать яблоко к яблоку, а затем перенести его в воздух ( apple_now_inAir
);
Как бы то ни было, и независимо от того, насколько хорошо я все форматирую, похоже, ничего не происходит. Ниже изображение того, как я запускаю программу:
Кто-нибудь сталкивался с этим раньше? Заранее спасибо. Я только начинаю с программирования игр, недавно сменив карьеру, так что не чувствую себя плохо.
Спасибо боб
apple_now_inAir.Drop!();
это бунт. В этом посте есть что-то амбициозное, растерянное, обреченное ...Ответы:
Главная проблема, которую я вижу здесь, заключается в том, что вы используете систему Windows. Эта ОС лучше всего подходит для имитации таких вещей, как окна и двери (неорганические). Вам нужно переключиться на компьютер Macintosh , это исключительно для симуляции яблок. Последняя версия ОС не только имитирует яблоки, она имеет дополнительную поддержку для крупных кошек, особенно горных львов. Однако, если вы хотите продолжить использовать свою систему Windows, вам нужно будет внести некоторые изменения. Сначала скачайте Visual Studio , она в основном используется для визуализации кода. В вашем случае это визуализирует ваши яблоки.
Затем вам нужно кодировать бинарное дерево, чтобы яблоки правильно созрели. Убедитесь, что добавили много листьев, чтобы дерево стало сильным (также убедитесь, что вы даете ему большой корень). Чтобы проверить яблоки на зрелость, вы можете взять из одного байта и передать биты через
tasteTest()
функцию. Теперь у вас есть яблоки! Но вы сказали, что хотите, чтобы они были как бумага, верно? Вы захотите перенести их в плоский файл для достижения этого эффекта. Не используйте базу данных для хранения яблок, они не будут достаточно плоскими.Наконец, чтобы яблоки упали, вам не хватает одного критического шага в вашем коде! Вы забыли добавить:
Это ошибка нуба, но это нормально. Наконец, убедитесь, что вы поместили яблоко в верхнюю часть экрана, чтобы ему было куда упасть. И Джимми предложил, вы также можете перевернуть монитор вверх дном, если яблоко не на той стороне, так как вы только начинаете, это может произойти.
В качестве дополнительного бонуса, поскольку вы используете Windows, если вы хотите создать диаграмму яблочного пирога в Microsoft Excel, вы можете легко смоделировать окно для его охлаждения.
В качестве альтернативы есть гораздо более простой способ сделать это, если вы хотите потратить немного денег.
Тогда есть устройство под названием ENCOM Digitizing Molecular Laser. Я уже видел, как раньше оцифровывали яблоки, и думаю, это пригодится вам. Вам даже не придется вводить все эти переменные, сканер сделает это за вас. Вот оно в действии:
источник