Já na Parte 11 introduzimos itens colecionáveis no nosso jogo, no nosso exemplo, ossos que o Stinky Dog precisa de recolher para avançar. Mas há outro tipo de item que podes usar no teu jogo e que oferece muito mais flexibilidade do que os colecionáveis.
O problema dos COLLECTABLE BLOCKS é que são todos tratados da mesma forma: recolhes-os colocando uma instrução GETBLOCKS no evento do jogador, que verifica se o jogador está a tocar num bloco colecionável e, se estiver, remove-o do ecrã e executa o evento COLLECT BLOCKS.
E é aí que está o problema.
O MPAGD não sabe que BLOCK específico recolheste, por isso, se tens vários tipos de colecionáveis e queres, por exemplo, que tenham pontuações diferentes, bónus ou que deem melhorias ao jogador, isso não se consegue facilmente com os COLLECTABLE BLOCKS.
Os OBJECTs, por outro lado, são um pouco diferentes. São itens que podes desenhar como imagens de 16 x 16 px (os blocos são de 8 x 8 no Speccy). Cada objeto tem um estado de 'posse', ou seja, onde está o OBJECT neste momento? Pode ser:
CARRYING : O jogador tem o objeto no seu inventário
Num ecrã específico, numa posição X Y específica
HIDDEN : Nem num ecrã nem transportado pelo jogador
Além disso, cada OBJECT tem um número de identificação específico que podemos usar no nosso código para:
PUT: colocar o objeto numa posição específica do ecrã atual
GET: apanhar o objeto para que passe a fazer parte do inventário do jogador
Testar IF GOT ou WHILE GOT para ver se o jogador tem o objeto específico e, se tiver, executar algum código.
REMOVEOBJ: remover um objeto
Como vês, os OBJECTs são bastante úteis. Tanto os OBJECTS como os COLLECTIBLE BLOCKS têm prós e contras, e vais ter de os ponderar ao decidir quando usar OBJECTS e quando usar COLLECTIBLE BLOCKS.
Algumas das vantagens dos OBJECTs incluem:
Imagens de 16x16 px que permitem gráficos mais interessantes
Mais flexibilidade na programação
Permitem usar o inventário do jogador (INV)
Quando um OBJECT é apanhado pelo jogador, permanece no inventário até fazermos REMOVEOBJ
Algumas das desvantagens dos OBJECTs incluem:
Cada objeto usa mais memória do que um COLLECTABLE BLOCK
Se quiseres vários do mesmo OBJECT, vais ter de criar várias versões do OBJECT
Quanto aos COLLECTABLE BLOCKS, algumas das vantagens são:
São leves e usam pouca memória
Podes ter vários colecionáveis em cada ecrã usando apenas 1 bloco
As desvantagens dos COLLECTABLE BLOCKS
Voltam a ser desenhados no ecrã depois de recolhidos se voltares a entrar num ecrã ou se usares o comando REDRAW, ou MENU
Não consegues (facilmente) perceber que bloco foi recolhido.
Em geral, o único uso que realmente vejo para os COLLECTABLE BLOCKS é em jogos do tipo Manic Miner, onde é preciso recolher todos os itens para avançar para o ecrã seguinte. Se estás a escrever um jogo de aventura arcade, então os OBJECTS são provavelmente o melhor caminho.
Nos meus jogos, acho os objetos úteis para coisas como:
Recompensas
Power ups
Bónus
Caixas de loot
Também podem ser usados como flags quando ficaste sem variáveis em certas circunstâncias, dependendo do tipo de jogo, mas isso é um tema um pouco mais avançado que vou abordar noutro dia1.
Para já, vamos criar um objeto para o nosso jogo. No menu Editor, seleciona OBJECTS:

Criei uma tigela de comida para cães. Vais reparar que o editor é muito parecido com o SPRITE EDITOR, mas há algumas diferenças:
Primeiro, podemos definir a cor do objeto (no Speccy, apenas a cor de primeiro plano) clicando na caixa de cor no canto superior direito... mudei-a para vermelho
Segundo, repara na caixa branca do lado direito, que nos indica:
O número do OBJECT (0)
A localização atual do OBJECT
Prime o cursor para cima ou para baixo para escolher a opção pretendida; a predefinida é CARRYING, o que significa que está no inventário do jogador.
A opção seguinte é HIDDEN: significa que não está no inventário do jogador nem num ecrã específico
Prime o cursor para cima outra vez e mudará para ROOM 000 (ou seja, SCREEN 0 )
Vamos selecionar ROOM 000 e, para o colocar no ecrã, prime a tecla P:

Isto leva-te ao SCREEN 0 e coloca o OBJECT no canto superior direito
Não o queremos ali, por isso clicamos no ecrã no sítio onde queremos colocar o objeto:

Feito isto, vamos voltar ao editor de OBJECTs (Editor > Objects) e criar mais alguns:
Para criar um novo Object prime a tecla X,

Criei um objeto lata de comida para cães, mas desta vez defini-o como 'Hidden'; talvez o use mais tarde como item de bónus... vamos ver.
Ok, tendo criado alguns objetos, vamos precisar de colocar código no PLAYER EVENT que gere o que acontece quando o jogador toca num OBJECT.
DETECTOBJ ; is sprite touching an object?
IF OBJ <> 255 ; did we detect an object?
GET OBJ ; automatically pick it up.
ENDIFO comando DETECTOBJ verifica se o jogador está a tocar num OBJECT; se estiver, guarda o número do OBJECT na variável OBJ, e se não estiver a tocar em nenhum, o valor de OBJ é definido como 255.
É por isso que verificamos se o valor de OBJ NÃO é 255 ( o <> significa NÃO É )
e se não for 255, devemos estar a tocar num OBJECT, por isso fazemos GET OBJ, ou seja, apanhamos o OBJECT cujo número está guardado neste momento na variável OBJ.
Vamos testar, mas primeiro vamos escrever um pouco mais de código que coloque uma mensagem no ecrã a dizer-nos que apanhámos o DOG BOWL.
DETECTOBJ ; is sprite touching an object?
IF OBJ <> 255 ; did we detect an object?
GET OBJ ; automatically pick it up.
IF OBJ = 0 ; is it the Dog Bowl
AT 10 4 ; at line 10 column 4
COLOUR 13 ; green ink on blue paper
PRINT "you got the dog food bowl!" ; display a message
DELAY 50 ; wait a couple of seconds
WAITKEY ; then wait for a key press
REDRAW ; redraw the screen & remove the message
ENDIF
ENDIF
Isto é o que deve acontecer:
Reparaste que, depois de colocarmos uma mensagem no ecrã a dizer que tínhamos apanhado a tigela de comida, tivemos de usar o comando REDRAW para remover a mensagem, e ao fazê-lo todos os ossos COLLECTIBLE que tínhamos recolhido voltaram a aparecer no ecrã?
Quando estás a começar, é importante perceber a diferença entre os COLLECTIBLE blocks e os OBJECTs, e que os dois nem sempre se dão bem.
Voltaremos a ver os OBJECTs mais adiante nesta série, à medida que o nosso jogo se desenvolver.
