Alex FC
Mensagens : 18 Data de inscrição : 07/08/2011 Idade : 30 Localização : Itaporã-MS
Parâmetros Advertências: (0/0)
| Assunto: Classe Image retorna Object e não uma imagem 14/8/2011, 19:45 | |
| Estava trabalhando no meu projeto quando me deparei com um enorme problema. Vamos ao inicio, sabemos que um projeto feito no monkey não começa ou continua se os recursos como imagens e sons não serem carregados. Sabendo disso vamos supor que criamos um novo objeto utilizando: - Código:
-
Local o:obj= New obj(10,20,LoadImage("sprite.png")) Até ai tudo bem. Mas agora vamos supor que eu tenha que criar um foguete e que como um de seus elementos tenhamos a fumaça, que faz o trajeto do foguete. A solução seria colocar o mesmo código de criação acima no Update do foguete, certo? Mas não funciona. Também tentei colocar a imagem em uma var global, mas deu acesso nulo de objeto. Simplesmente porque a função LoadImage não retorna uma imagem e sim um objeto da classe Image. Logo a criação de um objeto que carrega a toda hora uma imagem, não deixa o jogo iniciar ou continuar. Fuçando nos módulos do Monkey, mais precisamente no módulo gráfico vi que a Imagem é retornada no método Loaded() da Classe Image. Então uma soluução seria armazenar o objeto que carrega a imagem em uma variável global e depois na criação fazer isso: - Código:
-
Local fu:obj= New obj (x,y,obj_fum.Loaded()) Mas adivinhem, também não funciona porque o módulo é Extern e seus métodos só funcionam nele. Então fica a pergunta, como carregar uma imagem e não um objeto? FLWS! |
|
vinians
Mensagens : 23 Data de inscrição : 04/08/2011
Parâmetros Advertências: (0/0)
| Assunto: Re: Classe Image retorna Object e não uma imagem 15/8/2011, 08:40 | |
| E ae amigão blz? Uma imagem é realmente um objeto, mas isso não se torna um problema. Pra resolver isso no meu game eu crie uma classe sprite, fazendo isso, eu carrego todos os sprites que preciso no método OnCreate() e depois posso atribuir o sprite em qualquer objeto. Viu a diferença? "Atribuir" o sprite. Pois um objeto é uma referência, assim posso atribui-lo a várias referências gastando memória apenas uma vez. Exemplo: - Código:
-
Class MyGame Extends App Field Nave:Objeto Field OutraNave:Objeto Field MaisOutra:Objeto Field Tiro:Objeto Field sprNave:Sprite Method OnCreate() sprNave = new Sprite("nave.png", 1) Nave = New Objeto(10, 10, sprNave) OutraNave = New Objeto(10, 32, sprNave) MaisOutra = New Objeto(10, 64, sprNave) Tiro = New Objeto(1, 1, New Sprite("tiro.pn", 1)) End Method OnUpdate() End Method OnDraw() End End Class Objeto sprite:Sprite x:Float y:Float visible:boolean Method New(x:Float, y:Float, Sprite:sp) sprite = sp self.x = x self.y = y visible = true End Method Draw() If (visible) DrawImage(sprite.image, x, y, 0, 1, 1, Int(image_index)) image_index += image_speed If (image_index > sprite.image_count - 1) image_index = 0 End End End
Class Sprite Field image:Image Field image_count:Int Method New(file:String, frames:Int) image = LoadImage(file, frames, Image.MidHandle) image_count = frames End End
Basicamente é isso, ve se resolve pra você. Esse código é um pedaço do meu game e pode não funcionar diretamente pois ta faltando algumas coisas, é só pra você ter uma idéia. Vou postar o source do game depois e poderá lhe ajudar. Flws! |
|
Alex FC
Mensagens : 18 Data de inscrição : 07/08/2011 Idade : 30 Localização : Itaporã-MS
Parâmetros Advertências: (0/0)
| Assunto: Re: Classe Image retorna Object e não uma imagem 15/8/2011, 13:55 | |
| Entendi. E eu pensando que já manjava. Muito obrigado cara.
Em breve vou postar um tutu pra ajudar também.
Pode trancar.
FLWS! Resolvido. Trancado. |
|
Conteúdo patrocinado
| Assunto: Re: Classe Image retorna Object e não uma imagem | |
| |
|