Angius - Pią 14 Paź, 2011 10:47 Temat postu: Pytania i OdpowiedziNa wniosek z tego tematu zakładam takowy wątek. Jeśli się przyjmie, może i wydzieli się poddział
Ten temat przeznaczony jest do zadawania pytań odnośnie tworzenia skryptów. Jeśli w twoim skrypcie nie działa jakaś klasa, wywala błąd, lub nie wiesz, jak zabrać się za jakąś jego część, w tym temacie możesz zadać pytanie, a my postaramy się udzielić ci odpowiedzi.
Zasady:
- Nie piszemy odnośnie skryptów z forum - one mają swoje tematy
- Nie piszemy o cudzych skryptach, jedynie o problemach w tworzeniu własnych
- Zasada n°2 nie dotyczy gruntownego przerobienia/scalenia skryptów
- Nie jest to temat od gotowców - ma pomóc i naprowadzić, nie podać rozwiązanie na tacy.
No, to chyba tyle. Zaczynamy! Avara - Pon 17 Paź, 2011 12:22 Ja mam takie pytanka (oczywiście wszystko w skrypcie):
1. Czy da się zrobić tak, że obrazek, który ustawimy na mapie (w scene map), powtarza się w nieskończoność we wszystkich kierunkach Coś w stylu panoramy tylko na wierzchu i przewijany również w pionie.
2. Jak ustawić warunek "jeśli bohater znajduje się na mapie x" (jak się robi warunki wiem).
3. Warunek "jeśli bohater znajduje się na obszarze x mapy y".
Jeśli ktoś wie, to proszę o odpowiedź
Do Angiusa: Ten jeden temat chyba na razie wystarczy. Tylko nie kasuj go proszę, bo w różnych odstępach czasu będę chętnie z niego korzystać i być może inni też zaczną Finwe - Pon 17 Paź, 2011 13:18 Avara:
1. Nie wiem.
2. Ustalasz zmienną np. ID mapy na id na: inne, id mapy. Wstaw to przed warunkiem.
3. Możesz zrobić na zasadzie "pasów" ustawiasz zmienną na współrzędna X , lub Y. UWAGA: Musisz dać to po warunku z ID mapy.
Jak pomogłem do daj pomógł.Angius - Pon 17 Paź, 2011 14:30 1. Da się na pewno - musisz wytyczyć ścieżkę obrazka i zapętlić go, przykład masz choćby w skrypcie na animowane title obrazkowe, czy na scene_story dla VX, możesz na tym bazować.
2. Musisz wyciągnąć i sprawdzić ID mapy, czyli z grubsza to, co napisał Finwe
3. Tak samo, ale musisz wyciągnąć współrzędne.
PS. Kasować tematu nie zamierzam, ani stąd, ani z XP, ani z VX Avara - Pon 17 Paź, 2011 16:16 Finwe "pomógł" nie dam, bo po pierwsze nie mam jak (to nie ja tworzyłam temat), a po drugie innych odpowiedzi oczekiwałam. Ten sposób jest mi znany. Chciałam to zrobić bez jakichkolwiek zdarzeń i wiem, że się tak da, tylko nie wiem do końca, jak to zakodować.
Co do obrazka, to poszukam i popróbuję. Dzięki Angius
//Edit 18.10. 12:26:
Na 2. i 3. pytanie odpowiedź sama w końcu znalazłam. Z tym Title obrazkowym mam problem. Znalazłam jeden skrypt, ale link z demo wygasł, przez co trudniej jest go ogarnąć, ale jeszcze spróbuję.
//Edit 18.10 13:02:
W końcu udało mi się zrobić powtarzający i przesuwający się obrazek. Jeszcze raz dzięki Angius za podpowiedź
//Edit 19.10 po 23:00:
Umieszczę tutaj odpowiedzi do swoich poprzednich pytań.
1. Czy da się zrobić tak, że obrazek, który ustawimy na mapie (w scene map), powtarza się w nieskończoność we wszystkich kierunkach Coś w stylu panoramy tylko na wierzchu i przewijany również w pionie.
Spoiler:
W wybranej "scene" (np. Scene_Map) wrzucamy (np. w def "start") coś takiego:
Obrazek będzie się powtarzał w każdym kierunku. Oczywiście przezroczystość nie jest obowiązkowa
Później w def "update":
Kod:
@pano.ox += 1
@pano.oy += 1
Przy takich ustawieniach Obrazek będzie się przesuwał na skos w górę i w lewo z prędkością (w każdą stronę osobno) 1 kratki na sekundę. Jeśli chcemy, by obrazek poruszał się w przeciwnym kierunku musimy dodać przed liczbą myślnik i spację.
Oczywiście nie musi się to nazywać "@pano". Ten pomysł wzięłam ze skryptu "Story Scene" XP V1.0 autorstwa Moghunter. Skrypt ten został przerobiony na VX przez MrBoomGood. Tam było "@pano" i tak już zostało
2. Jak ustawić warunek "jeśli bohater znajduje się na mapie x".
W moim wypadku wystarczyło:
Spoiler:
Kod:
if $game_map.map_id == 1
end
3. Warunek "jeśli bohater znajduje się na obszarze x mapy y".
Spoiler:
Robiny nowe okno lub klasę. Uruchamiamy je/ją w Scene_Map i tam, gdzie potrzebujemy, dajemy warunek:
Kod:
if $game_player.current_area_name == "NAZWA_OBSZARU"
Oczywiście jako NAZWA_OBSZARU wpisujemy najwygodniejszą dla nas nazwę. Wówczas wszystkie obszary z wypisaną nazwą będą ustosunkowane do naszego warunku.
W skrypcie musimy umieścić jeszcze coś takiego:
Kod:
class Game_Character
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :reflect_offset # Character Reflection Offset
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
alias tds_sprite_reflection_initialize initialize
def initialize
tds_sprite_reflection_initialize
@reflect_offset = 0
end
#--------------------------------------------------------------------------
# * Determine if in Area
# area : Area data (RPG::Area)
#--------------------------------------------------------------------------
def in_area?(area)
return false if area == nil
return false if $game_map.map_id != area.map_id
return false if @x < area.rect.x
return false if @y < area.rect.y
return false if @x >= area.rect.x + area.rect.width
return false if @y >= area.rect.y + area.rect.height
return true
end
#--------------------------------------------------------------------------
# * Current Area Name
#--------------------------------------------------------------------------
def current_area_name
# Checks the areas in the maps
for area in $data_areas.values
# If the character is currently on an area
if in_area?(area) == true
# Give the value of the name of the area to the return variable
return_area_name = area.name
# Break loop
break
end
end
return return_area_name
end
end
Jest to fragment kodu autorstwa Sephirothtds "Lustrzane powierzchnie" ("TDS Sprite Reflect" Version: 1.7).
Wszystkie wykorzystane przeze mnie skrypty można znaleźć na Ultimie.
Miało być jeszcze nowe pytanie, ale nie mogę go sobie przypomnieć. Później się zapytam Avara - Nie 23 Paź, 2011 12:24 Ciągle łączę ze sobą posty, by nie było, że spamuję, ale nic nie poradzę, skoro po kilku dniach nie dostaję żadnych odpowiedzi (nie mam pretensji, tylko też jej do mnie nie miejcie ^^).
Oto ostatni mój post z pytaniem, po którym nie było odpowiedzi:
Spoiler:
Wysłany: Pią 21 Paź, 2011 14:53
By nie tworzyć kilku postów, połączyłam dwa ostatnie w jeden. Mam pytanko:
Czy da się wyświetlić pomniejszony obrazek NIE FRAGMENT tylko CAŁY POMNIEJSZONY Wydaje mi się, że tak, bo w "Game_Picture" znalazłam coś takiego, jak "zoom_x" i "zoom_y", których domyślna wartość to 100.0 . Próbowałam to zapisać na kilka różnych sposobów, np.:
Ale żaden z nich nie działa. Ma ktoś pomysł, jak to zrobić, by działało
A to moje dzisiejsze pytanie:
Trwa bitwa. Jest zaznaczony bohater z naszej drużyny. Jak przypisać zmiennej (skryptem oczywiście) id zaznaczonego bohatera (id "actor", nie "party_member") Finwe - Sob 05 Lis, 2011 19:12 Nie wiem czy to mądre pytanie... Ale zadam je. Czy da się zrobić tak, że w skrypcie aktywuje się Typowe zdarzenie, lu jak kto woli, common event?Melvin - Sob 05 Lis, 2011 20:20 Finwe:
Kod:
$game_temp.common_event_id = ID
PaayJer - Sro 09 Lis, 2011 19:42 jak byk jest napisane, że coś takiego się da zrobić a ja pomysłu nie mam:
skrypt, który pozwala ustalenie paru ścieżek, które ma pokonać jakieś zdarzenie
np. ustawiam jakiś (wymyślam) komentarz: script = new_road [numer_ścieżki], event [ID_zdarzenia]Melvin - Sro 09 Lis, 2011 20:43 PaayJer, "PathFinding script".Avara - Wto 15 Lis, 2011 11:45 Głowię się i głowię i nie mogę wymyślić. Chciałabym skryptem wyświetlić fragment obrazka w kształcie koła. Do tej pory wymyśliłam coś takiego:
Spoiler:
Możemy podzielić obrazek poziomo na pół (najpierw nam się rozszerza, a później zwęża, więc tak będzie na początku wygodniej. Załóżmy, że obrazek ma wymiary 100x100 Zaczęłam od górnej połówki:
Kod:
img = Cache.pictures("obrazek.png")
for a in 1..50
g = ???????
self.contents.blt(X + 50 - g, Y + a, img, Rect.new(img.width + 50 - g, img.height + a, 2 * g, 1), 255)
end
Zrobiłam "for a in 1..50", żeby uniknąć zera przy niektórych działaniach. X i Y wiadomo.
Ma może ktoś pomysł jakie działanie powinno być dla g albo jakiś inny pomysł, jak pokazać fragment obrazka w kształcie koła
W razie czego liczba pi to w Ruby:
Kod:
Math::PI
Mam tu też fragment skryptu "Menu Bars" BY Syvkal V 4.1 o tworzeniu pasków zmiennych w kształcie okręgu:
def fill_ring(ox, oy, radius, height, gc1, amount = 360, start = 0, reverse = false)
d = 2.0 * Math::PI / 360
for i in 1..[amount, 360].min
s = i + start
if reverse
x = ox + ( radius * Math.sin( d * s ) ).to_i
y = oy - ( radius * Math.cos( d * s ) ).to_i
else
x = ox - ( radius * Math.cos( d * s ) ).to_i
y = oy + ( radius * Math.sin( d * s ) ).to_i
end
fill_rect(x, y, height, height, gc1)
end
end
def gradient_fill_ring(ox, oy, radius, height, gc1, gc2, amount = 360, start = 0, reverse = false)
d = 2.0 * Math::PI / 360
for i in 1..amount
s = i + start
if reverse
x = ox + ( radius * Math.sin( d * s ) ).to_i
y = oy - ( radius * Math.cos( d * s ) ).to_i
else
x = ox - ( radius * Math.cos( d * s ) ).to_i
y = oy + ( radius * Math.sin( d * s ) ).to_i
end
color = get_gradient_pixel(gc1, gc2, amount, i)
fill_rect(x, y, height, height, color)
end
end
def get_gradient_pixel(gc1, gc2, amount, i)
red = gc1.red * (amount - i) / amount + gc2.red * i / amount
green = gc1.green * (amount - i) / amount + gc2.green * i / amount
blue = gc1.blue * (amount - i) / amount + gc2.blue * i / amount
alpha = gc1.alpha * (amount - i) / amount + gc2.alpha * i / amount
return Color.new(red, green, blue, alpha)
end
end
class Game_Actor < Game_Battler
def now_exp
return @exp - @exp_list[@level]
end
def next_exp
return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
end
end
Spoiler:
Prawdopodobnie jak zwykle zadałam zbyt trudne pytanie
Avara - Pią 18 Lis, 2011 21:34 Dobra... Już nie będę zadawać tak trudnych pytań, jak do tej pory
W jaki sposób mogę wstawić obrazek tak, by móc po nim chodzić (wiecie o co mi chodzi ).
Na dodatek chciałabym, by nie przesuwał się wraz z przewijaniem mapy (gdy dochodzimy do brzegu ekranu).
Za dużo zdarzeń, za dużo stron w tym zdarzeniu i za dużo grafik musiałabym zrobić, by uzyskać wymagany przeze mnie efekt.
Proszę o pomoc.
Spróbowałam to zrobić w ten sposób:
Spoiler:
Kod:
class Scene_Map < Scene_Base
alias st start
def start
st
@obr = Sprite.new(@viewport1)
@obr.x = 120
@obr.y = 150
@obr.z = 1
@obr.bitmap = Cache.picture("obrazek.png")
end
Dalej tylko "dispose" i "update ".
Ayene - Nie 20 Lis, 2011 11:04 Przede wszystkim takie obrazki dodawaj w 'Spriteset_Map'. Jaką wartość ma '@viewport1'? Możesz spróbować ustawić 'zetkę' nie bezpośrednio obrazkowi, ale właśnie zmiennej '@viewport1'.
Co do przesuwania, próbowałaś dodać parametr do 'update':
Avara - Wto 22 Lis, 2011 22:25 Dzięki Wszystko działa Napisałam też wcześniej do Sabikku, który odpisał podobnie. "@viewport1" wzięłam z Spriteset_Map, ale jest to zupełnie niepotrzebne. Musiałam chwilę pokombinować jak ustawić obrazek bardziej na środku mapy, ale w końcu do tego doszłam:
Trzeba dodać ilość pikseli, licząc od górnego, lewego rogu do miejsca gdzie chcemy mieć obrazek (oczywiście te liczby są przykładowe ). Przesuwać obrazka nie chcę, dlatego ustawiłam zwykłe x i y, a nie ox i oy
Obrazki w końcu zrobiłam w Scene_Map tym bardziej, że obrazek będzie zależny od zmiennej. Już nie chciałam kombinować w Spriteset_Map, skoro w Scene_Map wszystko pięknie działa.
Wielkie dzięki za pomoc Dla Ciebie i Sabikku Domilos - Pon 05 Mar, 2012 20:32 Jest komenda, zmienna, czy inne cuś, która sprawdza czy mamy jakąś zapisaną grę, albo ew. ilość zapisanych gier?Ayene - Wto 06 Mar, 2012 23:33 Jest kilka sposobów, polegają one na sprawdzeniu, czy w folderze z grą znajduje się jakikolwiek zapis. Można to zrobić zapytaniem:
Kod:
for i in 0..3
if FileTest.exist?("Save#{i+1}.rxdata")
...
end
end
Kod:
if Dir.glob('Save*.rxdata').size > 0
...
end
Kod:
if !Dir.glob('Save*.rxdata').empty?
...
end
miki55 - Sro 18 Kwi, 2012 15:15 Jak zrobić grę multiplayer ?Angius - Sro 18 Kwi, 2012 15:20 Nauczyć się przynajmniej C++, napisać własny silnik, wykupić serwer dedykowany...
Och, pytasz się, jak zrobić MMO w Makerze? W takim razie zajrzyj do IRAQ i spojrzyj na punkt 13-sty.miki55 - Sro 18 Kwi, 2012 18:58 ale to nie miała być gra mmo tylko żeby było można grać w nią singleplayer i multiplayerAngius - Czw 26 Kwi, 2012 21:33 Multiplayer, MMO - i jedno i drugie polega na rozgrywce w sieci, wobec czego - patrz mój post wyżej.sled - Pią 27 Kwi, 2012 06:38 zaskoczę Cię ale multiplayer często nie wymaga podłączenia do internetu (np multi w grach na konsole choćby na podzielonym ekranie i wówczas same gry miały/mają w opcji nazwę "MULTIPLAYER" mimo iż nie wymagają podłączonego internetu i nie są to pojedyncze wyjątki co widać zwłaszcza np w grach wydanych na konsole sony zarówno tych starszych jak i nowszych) podczas gdy mmo jest rozgrywką która odbywa się na postawionym serwie w efekcie czego bez podłączenia online nie zagrasz w grę
Co zaś się tyczy multi był pewien skrypt że można sterować 2postaciami jednocześnie (oczywiście każda postać ma inną configurację klawiszy)na mapie lecz prawdę mówiąc ciężko to nazwać multiplayerem... Pawelsar1 - Nie 29 Kwi, 2012 17:31 Temat postu: Próbuję sobie napisać dziennik misjiCoś tam kiedyś programowałem w paru językach i pomyślałem sobie, że napiszę dziennik misji. Umiem napisać okno w Ruby, tylko:
tekst wstawiamy za pomocą linijki:
Kod:
self.contents.draw_text(0, 0, 288, 32, "Losowy tekst służący do zapełnienia okna", 1)
Jeżeli skopiujemy tą linijkę, tylko zamiast "1" wpiszemy "2", i zmienimy parametry będziemy mięli nowe okno.
Aby wywołać oba okna musimy wkleić do skrypty Scene_Map
Kod:
@okienko = Window_okno.new
Czy jest możliwe wywołanie, jeżeli przełącznik np, 0001 jest ON (to akurat umiem) tylko okna np. "2"?Melvin - Nie 29 Kwi, 2012 20:52 Po co wywołujesz okna? Lepiej odpalić Scene, bo Window może lagować.
Co do Twojego pytania:
Kod:
if $game_switches[ID] == true
Pawelsar1 - Pon 30 Kwi, 2012 15:00 Melvin, nie chodzi mi o przełącznik. Mógłbyś przeczytać dokładniej przeczytać pytanie?Melvin - Pon 30 Kwi, 2012 21:19 Wiem, że myślenie jest ciężkie...
Zmień X i Y okna, tak, żeby wykraczały poza okno gry. Oczywiście wtedy, kiedy switch[id] jest OFF.Avara - Sro 13 Cze, 2012 10:16 Nieoczekiwanie pojawił się pewien problem i nie mam pojęcia, jakim cudem to się stało.
Stworzyłam zwykłe tablice wielowymiarowe:
Kod:
x = 10
for i in 1...10
$zmienna[x][0] = 0
end
Problem występuje, gdy chcę zmienić wartość zmiennej:
Kod:
$zmienna[1][0] = 1
Wówczas wszystkie zmienne
Kod:
$zmienna[x][0]
zmieniają wartość na "1" Dlaczego Projekt robiłam na twierdzówce, ale skopiowałam kody do angielskiej wersji i błąd się powtarza. Nie raz tak robiłam w innych projektach i nigdy nie miałam takiego błędu...Ayene - Czw 14 Cze, 2012 08:20 Gdzie tworzysz tablicę wielowymiarową? Jedyne co robisz to za jakąś dziwną zmienną podstawiać po prostu 1.
W tym fragmencie
Kod:
x = 10
for i in 1...10
$zmienna[x][0] = 0
end
jedynie co robisz to podstawiasz za zmienną "$zmienna[10][0]" wartość 0.
Czy jeszcze gdzieś deklarujesz czym jest w ogóle $zmienna?Avara - Czw 14 Cze, 2012 08:35 Wyżej wszystko uprościłam i faktycznie niepotrzebnie w ogóle to x zrobiłam (chciałam zrobić x od 1 do 10, ale nieważne). Nie tu jest problem. Po stworzeniu zmiennej wszystko działa jak należy. To podczas próby zmiany jednej zmiennej coś się dzieje. Gdy wpisuję
Kod:
$zmienna[1][0] = 1
to wszystkie 10 zmiennych zmienia swoją wartość na 1 Nie wiem, czemu tak się dzieje. Mam Ci podesłać małe demo Bo to może coś z moim kompem się porobiło Nie wiem już
Edit 14.06.2012 11:17
Wysłałam Ci już na PW demo, gdzie starałam się wszystko uprościć do minimum. Błąd wystąpił podczas pisania nowego skryptu. Szukając powodu, skopiowałam wszystko do nowego projektu, niepotrzebne rzeczy usunęłam i zostawiłam tylko to co niezbędne, a i tak dzieje się, co chce Ayene - Sob 16 Cze, 2012 13:47 W konfiguracji zmiennej za $zmienna[i] podstawiasz całą tablicę 'tab'. Tylko że podstawiasz ją zawsze tę samą, czyli każda zmiana powoduje zmianę tylko tej tablicy, nie przyporządkowania do zmiennej - mam nadzieję, ze dobrze tłumaczę. Innymi słowy podstawiając za zmienną tablicę powinno się ją klonować, tak aby nie odwoływała się ona do zawsze tej samej tablicy tab, tylko do każdej zmiennej była przyporządkowywana nowo, skopiowana. Czyli fragment:
Kod:
$zmienna[i] = tab
powinien wyglądać:
Kod:
$zmienna[i] = tab.clone
Avara - Sob 16 Cze, 2012 15:26 Wszystko działa. Dziękuję Ci Ayene po 100-kroć
TAK Pora zabrać się za kończenie skryptu [Wiem, wariatka ze mnie ]
Edit 23.06.2012 12:40
Usunęłam post z dzisiaj 00:21, ponieważ problem rozwiązałam sama. Osobom, które zaczęły się nad nim głowić, dziękuję za chęć pomocy TheBrave - Nie 09 Gru, 2012 00:21 @Angius Multiplayer to rozgrywka wieloosobowa najczesciej na jednej maszynie (komputer lub konsola)
MMO - MMORPG (Masive multiplayer online role playning game) jak sama nazwa wskazuje masive czyli na duza liczbe graczy ktorzy lacza sie do serwera i graja razem hmm jakby to ujac w spolecznosci :)dawidpieper - Nie 09 Gru, 2012 20:50 Temat postu: Pytaniewitam. Mam pytamie. Jak dodać okienko podczas bitwy? $wimdow nie działa, a ja chcę dodać hp wpńgów. Dziekuję. dawid PieperMrCorniszon - Czw 27 Gru, 2012 12:40 Czym są wpńgówie ?The Big Master - Wto 29 Sty, 2013 10:32
MrCorniszon napisał/a:
Czym są wpńgówie ?
Drogi MrCorniszonie wpńgówie to pradawne plemię orków i trolli, które nękają internet od samego jego powstania, przynajmniej ja tak słyszałem od samego lorda Somersby ;)Domilos - Sro 24 Kwi, 2013 18:05 Jak w RGSS3 sprawdzić, czy bohater o id X jest w drużynie?