Projecte Proj3

De wikijoan
Salta a la navegació Salta a la cerca

Introducció

Partint de projecte XMLReader, versió 4, l'objectiu del projecte és llegir les diferents versions del fitxer joan_petit.xml, i representar de forma gràfica la història que està explicada en aquest fitxer.

En aquest projecte anem desenvolupant el llenguatge puppetML. Els diferents actes i accions (un acte té una o varies accions) s'aniran desenvolupant de forma automàtica a partir d'una variable delay, que indica el temps de permanència de l'acció.

  • Tecla Q: per sortir de l'aplicació
  • Tecla espai: per anar al següent acte
  • Tecla Enter: per anar a la següent acció (un acte consta de diferents accions)

Per la consola s'anirà mostrant informació d'interès.

El primer que haurà de fer l'aplicació és carregar totes les imatges en memòria per tal que es puguin pintar de forma ràpida.

Diferència entre acte i acció (un acte té moltes accions).

En l'acte es carrega el landscape i es carreguen els personatges, amb les seves accions predeterminades.

En les accions només s'especifica els canvis als personatges que afecten a les accions. Tota la resta de comportament és la derivada de l'acte corresponent.

Versions

v1

Comencem per lo bàsic. Mostrem el títol, i el landscape del primer acte.

<?xml version="1.0" encoding="UTF-8"?>
<puppet_tale>
	<title>El Joan Petit com balla</title>
	<credits>
		<script>Joan Quintana Compte</script>
		<artwork />
		<music />
	</credits>
	<thanks_to />
	<acts>
		<act id="1">
			<landscape>
				<file img="landscape1.png">landscape1</file>
			</landscape>
		</act>
	</acts>
</puppet_tale>

v2

Ara la història té dos actes, que es mostren un darrera l'altre. La gràcia està en què totes les imatges es carreguen al principi.

<?xml version="1.0" encoding="UTF-8"?>
<puppet_tale>
	<title>El Joan Petit com balla</title>
	<credits>
		<script>Joan Quintana Compte</script>
		<artwork />
		<music />
	</credits>
	<thanks_to />
	<acts>
		<act id="1">
			<landscape>
				<file img="landscape1.png">landscape1</file>
			</landscape>
		</act>
		<act id="2">
			<landscape>
				<file img="landscape2.png">landscape2</file>
			</landscape>
		</act>
	</acts>
</puppet_tale>

v3

afegim moviment al landscape:

<landscape>
	<file img="landscape1.png">landscape1</file>
	<velx>10</velx>
	<vely>0</vely>
</landscape>

<landscape>
	<file img="landscape2.png">landscape2</file>
	<velx>-10</velx>
	<vely>5</vely>
</landscape>		

v4

Introduim un personatge: el Joan Petit. Els atributs s'assignen quan llegeixo characters. Ara bé, és quan entro dins l'acció que es visualitzen els personatges marcats com a visible=true i s'amaguen els marcats com a visible=false.

Recordem que quna inicïi el projecte el primer que he de fer és carregar les imatges, joan.png també. joan.png és un personatge sense boca, i és que la boca i el seu comportament la definiré en la següent versió.

<act id="1">
	<landscape>
		<file img="landscape1.png">landscape1</file>
	</landscape>
	<characters>
		<character id="1" img="joan.png">
			<name>Joan</name>
			<visible>true</visible>
			<posx>230</posx>
			<posy>130</posy>
			<velx>10</velx>
			<vely>0</vely>
		</character>
	</characters>
	<actions>
		<action id="1" />
	</actions>			
</act>

v5

  • Introdueixo les parts del personatge: ulls, cames, peus,... si és el cas
  • A l'inici hauré d'haver carregat les imatges llavi1.png i llavi2.png.
  • Quan entro dins de l'acció és quan s'haurà d'actualitzar el comportament del personatge. En aquest cas, si visible=true, com a mínim es visualitzarà el primer element de la part. Si movement=true, les dues imatges de llavis s'alternarar per donar la sensació de parlar.
  • visible=false movement=false -> no es veu cap part
  • visible=true movement=false -> només es veu el primer element de la matriu, no hi ha moviment
  • visible=true movement=true -> les diferents parts es van alternant: el personatge parla, el personatge camina,...
  • visible=false movement=true -> encara que hi ha moviment, no es visualitza res.
<character id="1" img="joan.png">
	<name>Joan</name>
	<visible>true</visible>
	<parts>
		<part id="llavis">
			<fitxers>
				<fitxer src="llavi1.png" />
				<fitxer src="llavi2.png" />
			</fitxers>
			<visible>true</visible>
			<movement>true</movement>
		</part>
	</parts>
</character>

v6

és el mateix que v5, però introdueixo dues parts: els llavis i els ulls. Per tal de què els llavis i els ulls no es moguin amb la mateixa base de temps, hauré d'introduir un factor aleatori per donar realisme. Queda clar que hi haurà aspectes del comportament que estaran definits en el fitxer XML, i hi haurà aspectes que estaran definits en les classes. El fitxer XML i l'especificació PuppetML haurà de descriure tot allò que sigui comú a les diferents històries que es poden explicar. Tot allò que no sigui generalitzable, haurà d'estar a dins del codi Java.

	<parts>
		<part id="llavis">
			<fitxers>
				<fitxer src="llavi1.png" />
				<fitxer src="llavi2.png" />
			</fitxers>
			<visible>true</visible>
			<movement>true</movement>
		</part>
		<part id="ulls">
			<fitxers>
				<fitxer src="ull1.png" />
				<fitxer src="ull2.png" />
			</fitxers>
			<visible>true</visible>
			<movement>true</movement>
		</part>
	</parts>

creat per Joan Quintana Compte, abril 2009