Skocz do zawartości
  • 0
Ice Cube

Strzał 3d

Pytanie

Witam

 

w obiekcie pocisk :

create:

move free -speed: 5 ,direction:obj_camera.direction

z=10

 

draw:

d3d_draw_wall(x-7*global.camsin,y-7*global.camcos,z,
                x+7*global.camsin,y+7*global.camcos,z+5,textura,1,1);

 

//////////////////////////////////////////////////////////////////////

pytanie jak zrobić strzelanie góra dół?

 

mam w obj_camera.pitch

i te "pitch" się zmienia w zależnosci gdzie patrze góra,dół

 

rozumiem,że musze coś zrobić ze zmienna Z

ale co ? :( 

 

 

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

32 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Halo halo! musze jeszcze o coś zapytać w związku z powyższym.

 

obj_naboj strasznie spowalnia mi gre ,fps spada z 40 do 10 gdy na planszy jest ok 40 pocisków(karabin),jeżeli jest wiecej to juz wogóle tragedia. ;/

 

 

obj_naboj/step :

 

with (obj_potwor1   ) {
    if (place_meeting(x, y, other.id)) {
        // kolizja nastąpiła, ale w 2D, sprawdźmy wysokość pocisku
        if (other.z < 24) {
            with (other) {
                // niszczymy pocisk
                instance_destroy();
            }
            // niszczymy wroga
            live-=1
            instance_create(x,y,obj_WYBUCH)
                   
// normalizujemy wektor 2D motion_xy
 motionlen = sqrt(other.motion_x*other.motion_x + other.motion_y*other.motion_y);
 xdir = other.motion_x / motionlen;
 ydir = other.motion_y / motionlen;

// teraz przesuwamy wroga
x += xdir * 10;
y += ydir * 10;    
            // przerywamy blok 'with'
            break;
        }
    }
}

 

 tutaj jest kolejny taki sam kod na potwora nr2

tutaj jest kolejny kod na potwora nr3 itd. ok. 20 potworów

 

 

 

x += motion_x;
y += motion_y;
z += motion_z;

 

if z<0 or z>200{instance_destroy()}// jezeli pocisk trafi w podloge lub w niebo -destroy

 

 

 

 

 

 

 

 

próbowałem zrobić coś w stylu :

if distance_to_object( obj_potwor1) or
 distance_to_object(obj_potwor2)or

distance_to_object(obj_potwor3) itd

<30{ i tutaj dopiero kod na sprawdzanie place_meeting}

 

 

to też nie dawało efektów..

idzie jakoś oszukać by step nie musiał sprawdzać ciągle wszystkiego?

 

 

 

 

 

 

 

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Widzę, że wkraczasz w bardziej złożone kwestie z programowaniem fizyki w grach :) Podejrzewam, że problem jest z dużą ilość wrogów na mapie - albo użyj dezaktywacji obiektów poza pewnym rejonem dookoła gracza funkcjami z rodziny instance_(de)activate_*, albo porzuć stosowanie flagi solid i oprogramuj swoją obsługę kolizji w Collision Event-ach.

 

Nie mam pojęcia, jak GameMaker obsługuje kolizje i czy stosuje coś na wzór spatial partitioning - quadtree, spatial hash itp., może ktoś bardziej obeznany w tych kwestiach z GMem by podpowiedział. Ale mógłbyś też posilić się własną implementacją sprawdzania kolizji używając quadtree czy prostszym w implementacji spatial hashing (quadtree vs spatial hashing).

 

PS. Możesz skrócić swój kod with(obj_potwor) do with(obj_potwory) ustawiając wrogom tego samego rodzica parent obj_potwory.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×