Skocz do zawartości

Fast Shoot


Rekomendowane odpowiedzi

Witam

Mam dylemat mianowicie nie wiem w jaki sposób mogę zrobić coś takiego jak na poniższym przykładzie

scren.gif

Mianowice

na samej górze mamy standardowy sposób strzelania wykorzystując Speed jest to przeskok o daną ilość pixeli tak więc jeśli przeciwnik ustawi się tak że pocisk go akurat ominie to nic się nie wydarzy tak jakby przeciwnik ten nie istniał

po środku mamy sposób dokładniejszy który mnie właśnie interesuje mianowice jest to metoda w której są sprawdzane wszystkie pixele w danym koncie (w ciągu ułamka sek. przelatuje przez całą plansze do czasu uchwycenia celu) i jeśli zostanie wykryta przeszkoda zostają wszczęte odpowiednie funkcje

na samym dole mamy identyczną zdarzenie tylko że na przeszkodzie stoi ściana i cel nie może zostać trafiony gdyż ściana blokuje pociski

 

I moje pytanie brzmi czy to się robi na collision_line czy na jakiejś innej metodzie ?? ale i tak w obu przypadkach proszę o przykład

 

Z góry dzięki

 

Pozdro eXcLiFe

Odnośnik do komentarza
Udostępnij na innych stronach

@Woock nie interesuje mnie taka metoda bardziej jestem skłonny użyć pętli

w taki sposób (jest to przykład z fps'a)

var xx, yy, ii;
  xx = global.cx;
  yy = global.cy;
  repeat (50)
  {
    xx += 4*global.ccos;
    yy -= 4*global.csin;
    ii = instance_position(xx,yy,obj_wall_basic);
    if (ii == noone) 
    {
      ii = instance_position(xx,yy,obj_monster_basic);
      if (ii == noone) continue;
      with (ii) {livess-=powerw-(distance_to_object(obj_player)/80);
      repeat (random(4)+6) {instance_create(xx,yy,obj_krew_draw);}};
               break;
    }          
  if instance_position(xx,yy,obj_plant_basic) continue; 
    if (ii.object_index == obj_paka) || (ii.object_index == obj_beka)  
       with (ii) livess-=powerw-(distance_to_object(obj_player)/80);
       repeat (random(4)+6) {instance_create(xx,yy,obj_odlamekpaki);;
    break;

Ale znowu ten przykład powoduje to że pocisk przelatuje przez ścianę i trafia w cel.

Nie bardzo wiem co jest nie tak ... więc jeśli ktoś zna inną metodę która działa lepiej, a w podobny sposób proszę o pomoc ...

Z góry dzięki

Odnośnik do komentarza
Udostępnij na innych stronach

Heh, pomyśleć tylko :]:

mc = cos(direction/180*pi)*speed;
ms = -sin(direction/180*pi)*speed;

//Kolizja: Sciana
if collision_line(x,y,x+mc,y+ms,ob_sciana,1,1)
{
    instance_destroy();
}

//Kolizja: Przeciwnik
i = collision_line(x,y,x+mc,y+ms,ob_przeciwnik,1,1)

if i
{
    instance_destroy();
    
    i.hp -= 10;
}
//Itd, itd ...

Odnośnik do komentarza
Udostępnij na innych stronach

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

Jedynie 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ę poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...