Shlizer - Wto 08 Lut, 2011 01:09 Temat postu: [RGSS] Zmienna przechowująca bitmapę graczaSzukałem, szukałem i doszukać się nie mogę.. czy ktoś może wie w której zmiennej przechowywany jest sprite lub bitmapa gracza (lub aktora o id 0). Chodzi mi o to, abym mógł sprawdzać piksele tej bitmapy - mam jej nazwę ($game_player.character_name), ale za nic nie mogę znaleźć wskaźnika na samą bitmapę.. nie ma go w Game_Battler, Game_Actor, Game_Character, Game_Player itd..
Jedyna opcja to chyba odwołanie się do Spriteset_Map -> ostatnia wartość tablicy @character_sprites.. da się to zrobić bardziej elegancko?Ayene - Wto 08 Lut, 2011 08:05 Nie wiem, czy dobrze rozumiem, ale może wprowadź dwie nowe definicje w Game_Player, które będę po prostu wyliczać szerokość bitmapy (tylko nie wiem, czy chcesz szerokość/wysokość całego pliku graficznego, czy tylko jednej klatki animacji charactersa).
Kod:
class Game_Player < Game_Character
def bitmap_width
return RPG::Cache.character(@character_name, @character_hue).width / 4
end
def bitmap_height
return RPG::Cache.character(@character_name, @character_hue).height / 4
end
end
Może i to kombinacja, ale chyba działa Sabikku - Wto 08 Lut, 2011 13:54 Pisząc 'sprawdzać piksele' Shlizer miał chyba na myśli coś więcej niż szerokość/wysokość aktualnej klatki...
Jeżeli chcesz sam wskaźnik, nie nowy obiekt, bitmapy grafiki actora - to tak, musisz pogrzebać w Spriteset_Map. Jeśli nie wiesz jak się tam odwołać:
Spoiler:
Jednym z 'eleganckich' sposobów jest po prostu przechować to w Game_Temp:
Kod:
class Game_Temp
attr_accessor :player_sprite
alias sginit initialize
def initialize
sginit
@player_sprite = nil
end
end
Potem wejdź w Spriteset_Map, odszukaj fragment "@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))" i zamień go na:
Nie zrozumiałem, czy potrzebujesz całej grafiki, czy tylko pojedynczą klatkę.
Jeśli całej grafiki, dorzuć sobie funkcję do Sprite_Character
Kod:
class Sprite_Character < RPG::Sprite
def get_bitmap
return self.bitmap
end
end
Potem wołaj o nią (zgodnie z zaspoilerowanym sposobem) w stylu: $game_temp.player_sprite.get_bitmap
Jeśli natomiast miałeś na myśli aktualną klatkę, hmm... Musisz użyć src_rect ze Sprite_Character, przechowuje on Rect wyznaczający aktualną klatkę. Nie bawiłem się w tego typu przycinania, nie jestem pewien jak przyciąć ładnie Bitmapę - ale oglądając ten fragment
Powinieneś sam dojść, jak w twoim 'sprawdzaniu pikseli' można to wykombinować.Shlizer - Wto 08 Lut, 2011 14:57 @Ayene: niestety nie zrozumiałaś.. chciałbym pobawić się bitmapą postaci gracza (przez get_pixel i set_pixel), a nie znać jej wymiary, ale dzięki za poświęcony czas..
@Sabikku: dzięki wielkie.. w sumie łatwy w osiągnięciu i robiący to, co powinien efekt =)