Skocz do zawartości

Rysowanie sprita pocisku na powierzchni (apliation_surface)


Rekomendowane odpowiedzi

Cześć wszystkim,

 

Mam lustro oparte na powierchni.

Kiedy gracz podchodzi do lustra to tworzy się jego lustrzane odbicie oraz wszystkie stany animacji bohatera które wykonuje przy lustrze.ale do pełni szczęścia brakuje Mi dwóch rzeczy

 

1. Nie mogę ustawić na powierzcni lustra aby sprite pocisku też się tworzyłtak samo jak tworzy się przy spricie bohatera.

Próbowałem już wielu rozwiązań i nadal sprite pocisku nie rysuje się na lustrze.

2. Chciałbym po odznaczeniu w opcjach przy obiekcie lustro opcji visible aby rysował się na dowolnych obiekcie na jakim go ustawie.

 

Obj_lustro

 

Draw

 

///lustro
// rysuje sprite lustra
draw_sprite(sprite_index,0,x,y);

// pozycja lustra


_xx = x;
_yy = y;


_surf = surface_create(300,200); // rozmiar lustra


surface_set_target(_surf);
draw_clear_alpha(c_black,0);
draw_sprite_ext(obj_hero.sprite_index,obj_hero.image_index,obj_hero.x - _xx ,obj_hero.y - _yy - 70,obj_hero.image_xscale,obj_hero.image_yscale,0,image_blend,.5)

var _xx1 = x
var _yy1 = y

with obj_pocisk {

draw_sprite(spr_pocisk, 0, x - _xx1, y  - _yy1 );


  }



surface_reset_target();

draw_surface(_surf,_xx,_yy); // rysuje lustro

surface_free(_surf) // czyść lustro

 

 

Kto mi wskaże gdzie leży błąd że nie chce mi się rysować na lustrze sprite broni?

Tylko czy ktoś tu zagląda?

 

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Administratorzy

Pamiętaj, że jak ustawisz surface, to resetuje się view i lewy górny róg to 0,0, więc trzeba odjąć offsety viewa, może tu jest problem.

Odnośnik do odpowiedzi
Udostępnij na innych stronach

No właśnie też pomyślałem o tym,że sprite pocisku rysuje mi się w pozycji 0,0. i dodanie tu jakichkolwiek wartości nie powoduje to,że sprite pocisku jest rysowany na lustrze ale na innej pozycji.

Siedzę główkuje nad tym od kilku dni.

Dobra to teraz takie pytanie...żeby ustawić offsety view to powinienem to zaimplementować już w samym  surface?

 

mam na myśli ten fragment

 

surface

 

_surf = surface_create(300,200); // rozmiar lustra

 

Jak to powinno prawidłowo wyglądać?

powinienem użyć zamiast funkcji draw_surface funkcję draw_surface_ext?

 

Dziękuję

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Skoro lustro działa na bohaterze a na przycisku nie to offsety nie mają nic do tego :P Po mojemu to ten kod:

with obj_pocisk {
draw_sprite(spr_pocisk, 0, x - _xx1, y  - _yy1 );
}

Nie łapie sie na surface.

Ja bym spróbował z:

for (i = 0; i < instance_number(obj_pocisk); i += 1) {
    obj = instance_find(obj_pocisk, i);
    draw_sprite(spr_pocisk, 0, obj.x - _xx1, obj.y  - _yy1 );
}

 

  • Lubię (+1) 1
Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiesz są jeszcze lepsze rozwiązania z shaderami..ale po co mi tłumienie itp bajery w odbiciu.Zresztą shadery są naprawdę już nie źle pokręcone.

Surface w tym przypadku wydaje się łatwiejsze w implementacji.

Kurcze żeby z tym pociskiem był taki problem:-(

 

 

 

Dziwne zjawisko wychodzi przy tym kodzie poniżej..Rysuje już pocisk na powierzchni lustra..tylko jest jeden mankament.

Zamiast pocisku jest rysowany sprite bohatera🙂

 

 

kod wygląda teraz tak

Obj_lustro

 

draw

 

///lustro
// rysuje sprite lustra
draw_sprite(sprite_index,0,x,y);

// pozycja lustra


_xx = x;
_yy = y;


_surf = surface_create(300,200); // rozmiar lustra


surface_set_target(_surf);
draw_clear_alpha(c_black,0);
draw_sprite_ext(obj_hero.sprite_index,obj_hero.image_index,obj_hero.x - _xx ,obj_hero.y - _yy - 70,obj_hero.image_xscale,obj_hero.image_yscale,0,image_blend,.5)

var _xx1 = x
var _yy1 = y

with obj_pocisk {

for (i = 0; i < instance_number(obj_pocisk); i += 1) {
    obj = instance_find(obj_pocisk, i);
    draw_sprite(spr_pocisk, 0, obj.x - _xx1, obj.y  - _yy1 );
}


  }



surface_reset_target();

draw_surface(_surf,_xx,_yy); // rysuje lustro

surface_free(_surf) // czyść lustro

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach

edit 1

 

Ok działa przepraszam ja tu strzeliłem babola..zamiast rysować sprita to rysowałem obiekt;-)

Podmieniłem też funkcje z draw_sprite na draw_sprite_ext aby uzyskać ten sam efekt co ze spritem bohatera czyli alpha i image_blend

Musiałem też dodać linijkę with obj_pocisk {

 

Twój  kod

 

}

 

Jeszcze raz wielkie dzięki za pomoc;-)

 

 

Mam jeszcze jedno pytanie..

zadałem je w sumie na początku tego wątku;-)

 

Chciałbym po odznaczeniu w opcjach przy obiekcie lustro opcji visible aby rysował się na dowolnych obiekcie na jakim go ustawie.

Już objaśniam w czym rzecz.

Teraz lustro ma sprita o wymiarach 300x200 ale chciałbym abym mógł tego sprita nakładać na dowolny obiekt i na tym obiekcie chciałbym aby te lustro było wyświetlane i jeszcze jedna rzecz ale to już nie wiem jakby to działało na powierzchniach.

Czy dałoby się np zrobić coś takiego

 

załóżmy,że obiekt lustro ma sprita o wymiarach 32x32 i ten sprite można dowolnie rozciągać  na dowolnej pozycji w pokoju gry np rozciągam go na dowolnym obiekcie na scenerii i dopasowuje go do tego obiektu i na tym fragmencie obiektu tworzy się lustro

czy można to osiągnąć na surface?  pewnie trzeba by było użyć bbox coś w tym rodzaju..ja tego nie robiłem,ale widziałem na necie jak ludzie wykorzystywali takie powściągliwe sprity do innych celów.

 

 

 

 

 

 

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wywal całkowicie with obj_pocisk i zostaw sam for bo masz pętle w pętli i dla każdego pocisku rysowane są wszystkie pociski :D Jak chcesz z edytora ze skalowaniem to nie jestem pewny ale powinno dać się obliczyć wielkość surface w create z sprite_width x sprite_xscale i tak samo z Y :D Ale nie mogę tego potwierdzić bo w GM ostatnio cokolwiek robiłem chyba w 2015r :) 

  • Lubię (+1) 1
Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dziękuje;-) usunąłem with faktycznie bez sensu była ta funkcja jak poniżej była pętla

 

Hmmm... wszystko działa jak należy i na chwile obecną tak to wygląda

 

///lustro
// rysuje sprite lustra
draw_sprite(sprite_index,0,x,y);

// pozycja lustra


_xx = x;
_yy = y;


_surf = surface_create(300,200); // rozmiar lustra


surface_set_target(_surf);
draw_clear_alpha(c_black,0);
draw_sprite_ext(obj_hero.sprite_index,obj_hero.image_index,obj_hero.x - _xx ,obj_hero.y - _yy - 70,obj_hero.image_xscale,obj_hero.image_yscale,0,image_blend,.5)


// rysujemy pocisk na surface
var _xx1 = x
var _yy1 = y



for (i = 0; i < instance_number(obj_pocisk); i += 1) {
    obj = instance_find(obj_pocisk, i);
    draw_sprite(spr_pocisk, 0, obj.x - _xx1, obj.y  - _yy1 );
}


  



surface_reset_target();

draw_surface(_surf,_xx,_yy); // rysuje lustro

surface_free(_surf) // czyść lustro

 

No dobrze pewnie to roboty sporo by było ten edytor ze skalowaniem;-)

A powiedz mi. Co muszę użyć aby lustro które mam na obiekcie mógł nakładać na dowolny obiekt na planszy? bo obecnie te lustro działa tylko na tym obiekcie w którym mam przypisany kod w zdarzeniu draw powyżej.

 

Dziękuję 🙂

 

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak nie będziesz na końcu usuwał tego surface z pamięci funkcją surface_free() to będziesz mógł używać go gdzie ci się podoba, w dowolnym obiekcie o ile zmienną _surf zrobisz globalną. Ale mankament jest taki że trzeba się zabezpieczyć przed niespodziewanym usunięciem go z pamięci vram. Dzieje się to niezależnie od gry. Np może się wyczyścić jak zminimalizujesz grę. Jak pamięć karty graficznej dobija do końca itd.

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tak tylko jak nie usunę  powierzchni z pamięci to nastąpi wyciek tej pamięci...

A tego trzeba pilnować no dobra to sobie to odpuszczę.

 

A mam pytanie...

 

jak narysować na tej samej powierzchni kawałek niewidocznej scenerii która na przykład jest na przeciwko lustra,ale w rzeczywistości nie istnieje,bo to gra 2D widziana z perspektywy klasycznych platformówek jak Mario itp.

Mam coś takiego na myśli gracz podchodzi do lustra jest on pokazany w lustrze jak jest teraz obecnie oraz kawałek niewidocznej nieistniejącej scenerii w lustrze która ma lub nie ma parallaxe.

Jak to dokładnie mam narysować na tej samej powierzchni?

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Administratorzy

Jeśli będzie jedno surface, to nie będzie wyciek.

 

Create:

global.costam = -1;

 

Draw:

if (!surface_exists(global.costam)) {
	global.costam = surface_create(200,200);
}

surface_set_target(global.costam);
...
surface_reset_target();

 

 

I żadnego wycieku nie ma, oraz możesz dowolnie używać tego surface ponownie (powtarzasz tylko kod z draw, już bez create, bo wtedy właśnie byłby memory leak).

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Czyli ta cała jedna zmienna globalna będzie pełnić rolę podobną jak funkcja surface_free? tyle,że będę mógł użyć/przenieść powierzchnie na dowolny obiekt?

 

Dobrze to brzmi sensownie.A takie pytanie mam chociaż już wcześniej je zadawałem.

W tech chwili mam stałe parametry powierzchni 300,200 bo też taki sprite powierzchni ma wymiary i na tej powierzchni tworzy się obecnie lustro.

I teraz tak:

 

Załóżmy że lustro i sprite powierzchni ma wymiary 32x32 i mogę go rozciągać na dowolny rozmiar na planszy (room edytorze)

I w miejscu gdzie nastąpi to rozciągnięcie sprita powstać ma lustro.Jak to prawidłowo zaimplementować? jest to wykonalne na surface?

Powinno użyć się funkcji

bbox_right + bbox_left
bbox_bottom + bbox_top

?

Czy może innego rozwiązania? aby jednocześnie skalowało się te lustro aby zachowało proporcje.

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Administratorzy

Możesz za pomocą draw_surface_part narysować tylko część.

 

45 minut temu, Pogromca_kodu77 napisał:

Czyli ta cała jedna zmienna globalna będzie pełnić rolę podobną jak funkcja surface_free?

 

Nie, ta zmienna będzie pilnować, żeby tylko jedno surface istniało. Surface zostaje skasowane przez GPU gdy włącza się wygaszacz albo komputer jest usypiany, lub gdy wyłączasz grę. Dlatego nie trzeba robić free w tej sytuacji, skoro i tak używasz tego surface często. surface_free raczej używa się, gdy wiesz, że już danego surface nie potrzebujesz (do końca gry, albo przez kilka sekund).

Co do ponownego rysowania - jest funkcja draw_clear i draw_clear_alpha która pomaga wyczyścić surface.

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Rozumiem.Dzięki za objaśnienie działania tej zmiennej globalnej.

 

Dobra pomyślałem sobie,że fajnie by było aby przedstawić na lustrze nie tylko odbicie bohatera czy też pocisk jakim strzela ale nieistniejący fragment scenerii na tym surface który np jest na przeciwko lustra fakt gra jest 2D i ta ściana nie istnieje ale załóżmy,że chce ją przedstawić w odbiciu lustrzanym

 

dodałem taki kod do zdarzenia draw w obj_lustro

 

var Rysuj = 0; 

with (obj_hero){
    
    
    if distance_to_object(obj_lustro) <= 20{
    
        
        Rysuj = 1; 
        
    }
}


if Rysuj {


draw_sprite_ext(spr_tlosurface,0,x ,300,image_xscale,image_yscale,0,image_blend,.5)

}

To nawet działa gracz podchodzi do lustra i na odpowiedniej pozycji rysuje się tło...brzmi dobrze? no nie do końca

Ponieważ nie mogę ustawić głębi na tym spricie a chciałbym aby te tło które rysuje na surface było za bohaterem a nie przed bohaterem

Może musiałbym użyć obiektu i tam ustawić głębię a następnie w funkcji draw_sprite_ext uwzględnić ten obiekt?

I druga sprawa jak gracz podejdzie do lustra te tło pojawia się od razu,a jak uzyskać taki efekt pojawiania się ze przejściem tego tła? np zanikanie? nie wiem jak to sprecyzować

 

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Administratorzy

Jeśli część ma być pod, a część nad, to nie da rady na jednym surface.

 

Pozostaje faktycznie dać drugi obiekt na innym layerze / innym depth, który jest pod wszystkim. Jeśli jednak to jest tło, to niekoniecznie trzeba używać tego samego surface, można draw_sprite_part spróbować, ale oczywiście tutaj będzie sporo zabawy w obliczenie prawidłowego rozmiaru. Może łatwiej będzie jednak to surface malować, skoro już dobrałeś parametry :)

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Słusznie 😉 zostanę przy surface

To jednak użyje to na obiekcie wtedy będę mógł dodać głębie.

Teraz tak to będzie wyglądać mniej więcej tak? zerkniesz?

 

var Rysuj = 0; 

with (obj_hero){
    
    
    if distance_to_object(obj_lustro) <= 20{
    
        
        Rysuj = 1; 
        
    }
}


if Rysuj {


draw_sprite_ext(obj_tlosurface.sprite_index,0,x ,300,image_xscale,image_yscale,0,image_blend,.5)

}

nie wiem czy też mam dodać obj_tlosurface do wartości x i y

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Administratorzy

Nie mam pojęcia jak wyglądają Twoje sprity, więc cieżko mo oceniać, czy trzeba coś przesuwać - to już musisz stwierdzić własnym wzrokiem :P

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie to mam na myśli 🙂 pozycje sprite ustawie sobie.

Chodzi o to,że kiedy w funkcji draw_sprite_ext odwołuje się do obiektu  obj_tlosurface dodając po kropce sprite_index to nie chce mi rysować na surface sprite z tego obiektu.

Musiałem też dodać funkcje instance_exists bo wywalało błąd,że taka instancja nie istnieje.

 

Co robię tu nie tak,że nie chce mi się z tego obiektu sprite rysować?

 

var Rysuj = 0; 

with (obj_hero){
    
    
    if distance_to_object(obj_lustro) <= 20{
    
        
        Rysuj = 1; 
        
    }
}

                                           
if instance_exists(obj_tlosurface) {
if Rysuj {


draw_sprite_ext(obj_tlosurface.sprite_index,0,x ,300,image_xscale,image_yscale,0,image_blend,.5)

}
   }                                       

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Administratorzy

Nie można rysować sprite obiektu, a jedynie istniejącej instancji.

Albo uzyj nazwy sprite bezpośrednio, albo zrób jakiś fallback do zmiennej tymczasowej, że jak instancja jest to weź z niej sprite a jak nie ma to jakiś jaki masz ochotę :)

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak chcesz sprite obiektu który nie istnieje w roomie to zrób tak:

if (instance_exists(obj_tlosurface)) {
	spriteToDraw = obj_tlosurface.sprite_index;
} else {
 	targetObject = instance_create(0,0, obj_tlosurface);
	spriteToDraw = targetObject.sprite_index;
	with (targetObject) {
      		instance_destroy();
  	}
}

I sprite który chcesz rysować masz w zmiennej spriteToDraw :)

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dziękuję za pomoc:-)

Mam jeszcze dwa pytania.

 

1.

Użyłem zgodnie ze wskazówkami sprita obiektu ale nadal tło rysowane na surface jest przed odbiciem lustrzanym bohatera a powinno być za nim.

głębię ustawiłem prawidłową na obiekcie obj_lustro które ma +10 a obiekt obj_tlosurface ma głębię ustawioną na +20 czyli jest dalsze niż odbicie lustrzane bohatera.

 

2.

Jak uzyskać efekt alpha jak gracz pojawi się przy lustrze?

Nie wiem jak to opisać..Tak na prosty rozum.

teraz tło pojawia się od razu jak gracz podejdzie do lustra i tak ma zostać tylko aby był efekt alpha/fade lub jakiegoś przejścia delikatnego jak podejdzie do lustra i jak oddali się od lustra

 

 

draw

 

 

///lustro
// rysuje sprite lustra
draw_sprite(sprite_index,0,x,y);

// pozycja lustra


_xx = x;
_yy = y;


_surf = surface_create(300,200); // rozmiar lustra


surface_set_target(_surf);
draw_clear_alpha(c_black,0);
draw_sprite_ext(obj_hero.sprite_index,obj_hero.image_index,obj_hero.x - _xx ,obj_hero.y - _yy - 70,obj_hero.image_xscale,obj_hero.image_yscale,0,image_blend,.5)


// rysujemy pocisk na surface
var _xx1 = x
var _yy1 = y



for (i = 0; i < instance_number(obj_pocisk); i += 1) {
    obj = instance_find(obj_pocisk, i);
    draw_sprite(spr_pocisk, 0, obj.x - _xx1, obj.y  - _yy1 );
}


  
   //rysujemy sprite obiektu ktory nie znajdujesie w room edytorze

if (instance_exists(obj_tlosurface)) {
spriteToDraw = obj_tlosurface.sprite_index;
} else {
 targetObject = instance_create(0,0, obj_tlosurface);
spriteToDraw = targetObject.sprite_index;
with (targetObject) {
      instance_destroy();
  }
}



//rysujemy tlo na surface 



var Rysuj = 0; 

with (obj_hero){
    
    
    if distance_to_object(obj_lustro) <= 20{
    
        
        Rysuj = 1; 
        
    }
}


if Rysuj {

draw_sprite_ext(spriteToDraw,0,x ,300,image_xscale,image_yscale,0,image_blend,.5)



}                                         

                                                                                       

surface_reset_target();

draw_surface(_surf,_xx,_yy); // rysuje lustro

surface_free(_surf) // czyść lustro
                                            
                                            

                                            
                                                                                        

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Edit 1

 

Ok przyczyna leżała w tym,że powinienem najpierw na surface namalować tło a następnie bohatera i pocisk.Teraz tło jest za bohaterem.

Mam jeszcze to ostatnie pytanie co wcześniej zapytałem;-)

 

Jak uzyskać efekt pojawiania się i zanikania tła na lustrze? bo teraz to jak podchodzi gracz do lustra to tło tak szybko się pojawia be przejścia i jak oddale się od lustra to tło szybko znika.

Nie wiem czy dobrze to sprecyzowałem.

 

Dziękuję

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Administratorzy

draw_sprite_ext ma parametr alfa, są też funkcje do rysowania surface z kanałem alpha, może w tę stronę ?

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Może trzeba by było użyć zmiennej, aby kontrolować opcje alfa? Kiedy bohater znajdzie się w zakresie, powoli zwiększa się zmienną z niską wartością, aby przejść od 0 do 1. Gdy bohater wyjdzie z zakresu, zmniejsza się wartość zmiennej do 0.

 

 

Chociaż to tylko pomogłoby w przypadku tła ale odbicie bohatera i pocisk nie będą miały tego efektu.

Twój pomysł w sobie wydaje się być logiczny z surface z kanałem alpha.

Chociaż sam już nie wiem.

Tylko jak to prawidłowo zaimplementować?

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Administratorzy

No to znów matematyka. Możesz np. sprawdzać odległość, załóżmy, że alpha ma się zmieniać od 123 pikseli od postaci (podaję taką dziwną liczbę, żeby lepiej było to widać w działaniu).

 

var dist = distance_to_point(lustro_x, lustro_y, bohater.x, bohater.y);
var alpha = 1 - clamp(dist/123, 0, 1);
// można też np.:
// var alpha = 1 - min(1, dist/123);
// itd. itp.

draw_sprite_ext(......, alpha); // czy tam draw_suface_ext, obojętnie

 

  • Lubię (+1) 1
Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dziękuję.

Nasunęło mi się jeszcze jedno pytanie bo wcześniej nie brałem tego pod uwagę.

 

Używam w grze widoków.

Mam parallaxe na każdej scenerii i też na tej gdzie umieściłem lustro.

Sprite używam jako tła aby operować głębią.

Tło na którym jest umieszczone lustro używa też parallaxy i tą parallaxe ustawiłem też na obiekcie lustra tak aby dawało to wrażenie,że lustro jest wtopione w tło ruchome

Jednak mam pewien problem.Kiedy tło z lustrem się porusza to stworzone   przeze mnie rozmiar lustra surface_create jest cały czas w tej samej pozycji.

Powinno tak samo poruszać się z tą samą prędkością z wtopionym tłem z lustrem.

 

Próbowałem do surfce dodać widoki,ale to nic nie pomaga.

Teraz wygląda to tak jakby za lustrem z lewej strony tworzyło się już lustro na części tła gdzie jeszcze nie ma lustra.

Nie wiem czy dobrze to wyjaśniłem...

 

Kod wygląda tak i zaznaczyłem gdzie jest parallaxa

 

obj_lustro

 

draw

 

///lustro
// rysuje sprite lustra


//draw_sprite(sprite_index,0,x,y);
// lustro przesuwa sie z tą samą prędkością co tło na którym jest te lustro wtopione
if instance_exists(obj_hero) {

draw_sprite(sprite_lustro,image_index,x+view_xview/7.5,y+view_yview/7.5)

  }

// pozycja lustra


_xx = x;
_yy = y;


_surf = surface_create(300,200); // rozmiar lustra


surface_set_target(_surf);
draw_clear_alpha(c_black,0);
draw_sprite_ext(obj_hero.sprite_index,obj_hero.image_index,obj_hero.x+view_xview/7.5 - _xx ,obj_hero.y+view_yview/7.5 - _yy - 70,obj_hero.image_xscale,obj_hero.image_yscale,0,image_blend,.5)


// rysujemy pocisk na surface
var _xx1 = x
var _yy1 = y



for (i = 0; i < instance_number(obj_pocisk); i += 1) {
    obj = instance_find(obj_pocisk, i);
    draw_sprite(spr_pocisk, 0, obj.x+view_xview/7.5 - _xx1, obj.y+view_yview/7.5  - _yy1 );
}


  
   //rysujemy sprite obiektu ktory nie znajdujesie w room edytorze

if (instance_exists(obj_tlosurface)) {
spriteToDraw = obj_tlosurface.sprite_index;
} else {
 targetObject = instance_create(0,0, obj_tlosurface);
spriteToDraw = targetObject.sprite_index;
with (targetObject) {
      instance_destroy();
  }
}



//rysujemy tlo na surface 



var Rysuj = 0; 

with (obj_hero){
    
    
    if distance_to_object(obj_lustro) <= 20{
    
        
        Rysuj = 1; 
        
    }
}


if Rysuj {

draw_sprite_ext(spriteToDraw,0,x+view_xview/7.5 ,300+view_yview/7.5,image_xscale,image_yscale,0,image_blend,.5)



}                                         

                                                                                       

surface_reset_target();

draw_surface(_surf,_xx,_yy); // rysuje lustro

surface_free(_surf) // czyść lustro
                                           

 

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Administratorzy

A weź daj jakiegoś screena bo ja kompletnie nie umiem sobie tego wyobrazić z opisu.

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Myślę,że tu rozwiązałoby problem aby wymusić tą pozycje obiektu lustra taką samą jak jest wyłączona parallaxa na obiekcie lustro.

Ja rozumiem,że lustro będzie się poruszać przy parallaxie ale zastanawia mnie to dlaczego pozycja obiektu lustra się zmienia w room edytorze to jest ten problem.

O dziwo wszystko idealnie jest ze sobą zgrane jak nie mam ruchomego tła a na nim ruchome lustro poruszające się z tą samą prędkością co tło dające efekt jakby to lustro było element tła wtopionego na tle

 

Odnośnik do odpowiedzi
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ę...