Objekte kollidieren nicht (3D)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Objekte kollidieren nicht (3D)

    Nabend, ich hab n Problem und hab keine Ahnung was falsch ist. Folgendes: Mit diesem Code

    Quellcode

    1. d3d_transform_set_identity();
    2. d3d_transform_set_rotation_axis(x,y,0,angleY);
    3. d3d_draw_block(x,y,0,x+10,y+64,+100,background_get_texture(back1),1,1);
    4. d3d_transform_set_identity();


    zeichne ich ein 3D Stein ein. Mit d3d_transform... wird das Objekt transformiert, sodass es aussieht als würde der Stein umfallen. So, alles schön und gut, aber die Steine kollidieren nicht. Also soll, wenn ein Stein umfliegt und beim umfliegen einen anderen erfasst, diesen auch zum umfallen bringen (

    Quellcode

    1. kippen=true
    ). Nur Leider funktioniert diese Kollisionsabfrage nicht, obwohl sich die Objekte berühren. Wer kann helfen? Danke
    Bilder
    • Unbenannt.jpg

      7,23 kB, 439×362, 286 mal angesehen
    Retroware.de - Webdesign, Print und Apps aus Regensburg.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von buzZ ()

  • Der Gamemaker unterstützt nur Kollisionen im 2 dimensionalen Raum, also musst du dir bei 3D etwas einfallen lassen ;) Entweder du benutzt die 2D Kollision und überprüfst einfach noch die z-Achse manuell oder du machst alle 3 Dimensionen selber (kann unter Umständen einfach sein).

    Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • kollisionsabfragen werden nicht automatisch in den drei deimensionalen raum umgerechnet. die kollision findet weiterhin nur zwischen den gesetzen sprites statt. du musst also deinem object ein sprite zuweisen, das exakt der eingenommen fläche entspricht, die das object hat wenn man es von oben betrachten würde (was du anscheinend schon gemacht hast, sonst würde es nicht klappen, wenn sich die steine berühren).
    wenn sich die steine nun aber nicht berühren gibt es auch keinen kollisionsevent...
    du musst den steinen also eine funktion konstuieren, die dem nachbarstein sagt wenn er umzufallen hat. das ließe sich z.b. sehr einfach duch ein skaliertes sprite lösen, das in die entsprechende richtung skaliert wird. das könnte sich aber als ressourcen-fressen erweisen.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • create-event:

    GML-Quellcode

    1. fall=false;
    2. xrot=0;


    step-event:

    GML-Quellcode

    1. if fall=true && xrot<90 {xrot+=1;}


    draw_event:

    GML-Quellcode

    1. // GML Code created with Smart Poly - Version: 1.30
    2. // © 2005 by VectorGames.de - All rights reserved!
    3. // extended1
    4. draw_set_alpha(1);
    5. draw_set_color(8421504);
    6. d3d_transform_set_identity();
    7. d3d_transform_add_translation(-x+0,-y+0,-z+0,);
    8. d3d_transform_add_rotation_x(xrot);
    9. d3d_transform_add_translation(x+0,y+0,z+0);
    10. // Object-code:
    11. d3d_draw_block(x-50,y-10,z+0,x+50,y+10,z+140,-4,1,1);
    12. d3d_transform_set_identity();
    Alles anzeigen


    wenn du nun fall auf true setzt, fällt der stein (warscheinlich ziemlich schnell) zur x achse hin um.

    EDIT: ich habe einen anderen block verwendet! musst den code noch für dein game anpassen.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • Benutzer online 2

    2 Besucher