Na 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!
________________________
"Na trolla pewne są tylko dwie pewne metody, jedna samopowtarzalna i druga, wymagająca przeładowania ręcznego."
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ą
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ł.
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
________________________
"Na trolla pewne są tylko dwie pewne metody, jedna samopowtarzalna i druga, wymagająca przeładowania ręcznego."
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
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")
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]
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
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
Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: 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':
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.
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum