Estoy tratando de crear un juego con física newtoniana.
Antes de leer el resto de esto, esta es mi pregunta principal a la que estoy tratando de encontrar una respuesta:
- Sigo recibiendo un error que aparece en una ventana después de intentar ejecutar mi código. ¿Qué biblioteca o dll me estoy perdiendo?
Tengo una manzana, una naranja y un lápiz. He leído la mayor parte de la documentación con el motor de física de bala, pero parece que no puedo hacer que la manzana se comporte como un papel (2d-ish). Los motores de física Box2d y demás no son lo que quiero. No me gustan las cajas en la vida real, y mucho menos en los cibermundos.
Quiero que la manzana flote hacia el suelo, balanceándose de un lado a otro como lo haría un trozo de papel. Este sitio proporcionó información útil que integré en mi código: htp: //www.3dbuzz.com/vbforum/showthread.php? 50854-Please-HELP !! -Simulating-paper-floating-to-ground
Tengo esta idea para un juego en el que haces que los objetos se comporten como otros tipos de objetos, pero mis simulaciones del juego simplemente no funcionan.
He pasado por muchos tipos de manzanas para contar, y ninguna de ellas se acerca. He intentado buscar a otras personas que hayan intentado cosas similares (usando google como http://lmgtfy.com/?q=simluating+game+apples+in+real+life ), ¡pero nunca se devuelven manzanas!
Por lo tanto, creo que voy a entrar en un nuevo territorio aquí (no te preocupes, abriré el código fuente de mis técnicas), y es por eso que las cosas simplemente no funcionan para mí.
He intentado programar diferentes tipos de manzanas, pero ¿tal vez necesito una manzana cibernética? No sé dónde conseguir uno de esos, tal vez en un lugar como este: http://cyberapples.com/ Ese sitio está caído por ahora, sin embargo, solo se trata de un contenedor de basura cgi o algo así. ¿Algún consejo sobre esto también?
Esta es la parte de mi código que trata con la manzana que simula cosas del juego:
///... /* 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!();
Como puede ver, tengo los conceptos básicos, y estoy siendo muy descriptivo con mis nombres de variables y los atributos del objeto. Configuré el mundo de manera muy sucinta y clara, aunque he simplificado el mundo en el juego en comparación con la cocina real.
Creo que el problema es atar la manzana paper_2d_behaving_apple
a la actual_existing_apple_on_myCounter
manzana y luego transferirla a la que está en el aire ( apple_now_inAir
);
Cualquiera sea el caso, y no importa qué tan bien formatee todo, nada parece suceder. A continuación se muestra una imagen de cómo ejecuto el programa:
¿Alguien se ha encontrado con esto antes? Gracias por adelantado. Estoy comenzando con la programación de juegos, habiendo cambiado recientemente de carrera, así que no te sientas mal.
Gracias Bob
apple_now_inAir.Drop!();
es un motín. Hay algo en esta publicación: ambicioso, confuso, condenado ...Respuestas:
El problema principal que veo aquí es que estás usando un sistema Windows. Este sistema operativo funciona mejor para simular cosas como ventanas y puertas (no orgánicas). Debe cambiar a una computadora Macintosh , estos son excepcionales con la simulación de manzanas. La última versión del sistema operativo no solo simula manzanas, también tiene soporte adicional para gatos grandes, particularmente leones de montaña. Sin embargo, si desea continuar usando su sistema Windows, necesitará hacer algunos cambios. Primero descargue Visual Studio , su uso principal es para visualizar código. En su caso, visualizará sus manzanas.
A continuación, debe codificar un árbol binario para que sus manzanas maduren adecuadamente. Asegúrese de agregar muchas hojas para que el árbol crezca fuerte (también asegúrese de darle una gran raíz). Para probar la maduración de las manzanas, puede extraer un byte de una y pasar los bits a través de la
tasteTest()
función. ¡Ahora tienes manzanas! Pero, dijiste que querías que fueran como papel, ¿verdad? Querrás portarlos a un archivo plano para lograr ese efecto. No use una base de datos para almacenar las manzanas, no serán lo suficientemente planas.Finalmente, para que las manzanas floten, ¡te estás perdiendo un paso crítico en tu código! Olvidaste agregar:
Es un error novato, pero está bien. Finalmente, asegúrese de colocar la manzana en la parte superior de la pantalla, de modo que tenga un lugar donde caer. Y Jimmy sugirió que también puede poner el monitor al revés si la manzana está en el lado equivocado, ya que recién está comenzando, es probable que esto suceda.
Como beneficio adicional, dado que está utilizando Windows, si desea hacer un gráfico circular de manzana en Microsoft Excel, puede simular fácilmente una ventana para enfriarlo.
Alternativamente, hay una manera mucho más fácil de hacerlo si desea gastar un poco de dinero.
Hay un dispositivo llamado entonces ENCOM Digitizing Molecular Laser. He visto que antes digitalizaba manzanas, y creo que sería útil para usted. Ni siquiera tendría que escribir todas esas variables, el escáner lo haría por usted. Aquí está en acción:
fuente