Skocz do zawartości

JerryJohn

Użytkownicy
  • Postów

    10
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez JerryJohn

  1. Witam, Mam surface który wypełniony jest na czarno z określonym alpha. Następnie rysuję na nim sprite'y świateł o określonym kolorze używając bm_add: GML // STEP surface_set_target(global.Light); if ( Outdoor ) { draw_clear_alpha(c_black,Alpha); draw_set_blend_mode(bm_add); draw_sprite_ext(sLightBulb1,0,oPlayer.x-view_xview[0],oPlayer.y-view_yview[0],1,1,0,c_white,1); if ( global.DayTime == dtNight && oPlayer.WeaponSeathed ) draw_sprite_ext(sLightBulb3,0,oPlayer.x-view_xview[0],oPlayer.y-view_yview[0],2,2,oPlayer.Direction,c_orange,1); with ( oFire ) draw_sprite_ext(sLightBulb1,0,x-view_xview[0],y-view_yview[0],1,1,0,c_white,1); } draw_set_alpha(1); draw_set_blend_mode(bm_normal); surface_reset_target(); // DRAW draw_set_blend_mode_ext(bm_zero,bm_src_color); draw_surface(global.Light,view_xview[0],view_yview[0]); draw_set_blend_mode(bm_normal); W rezultacie otrzymuję czarny surface bez uwzglednienia Alpha (czyli z alpha = 1), oraz sprity świateł o określonym kolorze które akurat rysują się bardzo fajnie. Problemem jest draw_set_blend_mode_ext(bm_zero,bm_src_color), które tak jakby w ogóle nie brało pod uwagę kanału alpha. Nie znam się na tych trybach za bardzo, sposób ten znalazłem na forum yoyogames i nie wiem za bardzo jak to naprawić. Z góry dzięki, pozdrawiam
  2. Witam, Zrobiłem sobie taką oto minimapę: http://www.gmclan.org/up8765_12_minimap.html Wyświetlany jest fragment sprite'a odpowiadajacy głównemu view powiększony o odpowiednie offsety( _ol i _ot ). Mam problem z rysowaniem pozycji gracza w określonym przedziale. Kiedy pozycja view z offsetami jest większa od 0 działa OK: miniatura gracza jest w centrum minimapy i przesuwa się razem z nią. Problem jest kiedy minimapa dojdzie do brzegu rooma, wtedy ona się zatrzymuje i to jest OK, ale pozycja gracza też się zatrzymuje aż do momentu kiedy dojdzie bardzo blisko brzegu (wtedy zaczyna działać ten warunek który tam wykminiłem na dole), a powinien on się dalej poruszać (tak jak i właściwy obiekt gracza). Zatrzymać w danej osi powinien się tylko wtedy kiedy minimapa zaczyna się po tej osi przesuwać. Żeby zobaczyć o co mi chodzi wystarczy przesuwać obiekt gracza cały czas np, w dół (LPM) i obserwować jego miniaturę na minimapie. Powinno to działać dokładnie tak samo jak działa view w roomie, podążający za obiektem, z tą różnicą że minimapa jest poszerzona o te offsety. Będę wdzięczny jeśli ktoś w to zajrzy i pomoże naprawić :) Pozdrawiam
  3. O żesz, nie wiedziałem że taki coś istnieje :P Dzięki
  4. Niestety nie, potrzbuję znać wysokość tego stringa przed narysowaniem ;)
  5. Witam, Potrzebuję jakiegoś skryptu, który podzieli mi string o długości x na string o n wierszach długości y, wstawiając w odpowiednie miejsca znaczek #. Tyle udało mi się zrobić dotychczas: GML var _descl,_i,_temp; _descl = 30; _i = 1; while ( string_length( _tooltipContent[6] ) > _descl*_i ) { _temp = _tooltipContent[6]; _tooltipContent[6] = string_insert( "#", _temp, _descl*_i ); _i += 1; } Ale sęk w tym że to potrafi rozwalić wyraz na kawałki, a tego bym nie chciał. Niestety nie umiem napisać działającego algorytmu który by odpowiednio wstawiał # przed lub po wyrazie, dlatego zwracam sie o pomoc :rolleyes:
  6. Zastanawiam się na ile optymalnym rozwiązaniem byłoby np. wysyłanie jedynie kierunku, ale cześciej (np. co 10ms) oraz wiadomości o rozpoczęciu i zatrzymaniu ruchu. Klient od momentu otrzymania wiadomości o starcie poruszałby gracza cały czas zmieniając jedynie kerunek do momentu otrzymania wiadomości o zatrzymaniu.
  7. Witam ponownie, Piszę prostą grę multiplayer używając 39dll i napotkałem "problem" dotyczący uaktualniania pozycji graczy w kliencie. Mianowicie nie potrafię znaleźć optymalnego sposobu na poruszanie graczy, aby ich pozycje u innych klientow były jak najbardziej adekwatne do ich rzeczywistej pozycji. Wiem na pewno że nie mogę wysyłać ich pozycji zbyt często, co na pewno rozwiązałoby problem, ale zalagowało serwer. Staram się wysyłać co 1 sekundę z klienta, a następnie po odebraniu na serwerze rozsysłam do innych klientów. Następnie na kliencie poruszam obiekt gracza w kierunku odebranej pozycji. Jednakże metoda ta z góry zakłada opóźnienie na kliencie 1sek + czas przemieszczenia gracza do nowej pozycji. Czy istnieje jakiś inny sposób? Wiem że można od razu umieszczać gracza na odebranej pozycji, a następnie poruszac go na ślepo w tym samym kierunku, co gwarantuje brak opóźnienia, ale za to przekłamania w jego aktualnej pozycji, a jeżeli gracz się zatrzyma to prawdopodobne "skoki" w tył ;) Pozdrawiam i z góry dzięki za zainteresowanie problemem :sleep1:
  8. Udało mi się znaleźć rozwiązanie. Dla potomnych: GML x = view_xview[0] + view_wview[0]/2 + lengthdir_x(x_offset-view_wview[0]/2,-view_angle[0]) + lengthdir_x(y_offset-view_hview[0]/2,-view_angle[0]-90); y = view_yview[0] + view_hview[0]/2 + lengthdir_y(x_offset-view_wview[0]/2,-view_angle[0]) + lengthdir_y(y_offset-view_hview[0]/2,-view_angle[0]-90); image_angle = -view_angle[0];
  9. Działa ładnie, tylko że jedynie jeśli chodzi o rysowanie sprite, sam obiekt dalej jest obrócony razem z view, przez co nie działają eventy typu Left Pressed itp (przynajmniej nie tak jak powinny), mam nadzieje że wiadomo co mam na myśli ;) Podejrzewam że trzeba cały obiekt odpowiednio przesunąć i obrócić, samo rysowanie nie wystarczy :)
  10. Witam, mam pewien problem, otóż: Zmienia się view_angle[0]: GML view_angle[0] -= ( (view_wport[0]/2 ) - window_mouse_getx())*0.1; window_mouse_set( (view_wport[0]/2 ) ,0); a obiekt oHUD przyjmuje: GML x = view_xview[0]; y = view_yview[0]; oraz origin jego sprite'a znajduje się w punkcie (0,0). Efekt jest taki że obraca się razem z viewem, więc doszedłem do wniosku że HUD trzeba obrócić o kąt przeciwny do kąta view_angle[0], sęk w tym że jego origin jest w (0,0), a zdaje się view jest obracany względem jego środka (?), więc trzeba to obrócić jakoś inaczej, tudzież skorygować położenie rysowania HUDa i tutaj zwracam się z prośbą o pomoc bo nie mam pojęcia jak ;) Pozdrawiam
×
×
  • Dodaj nową pozycję...