Jump to content

Recommended Posts

Posted (edited)

Olá,

Estou a programar um joguinho, e estou tentando acessar as matrizes de forma rápida, mas sem usar muitos For..Do e estou tendo o seguinte problema..

// PARAMETROS DO DESENHAXY(Cor, Objeto, X, Y).

For I := 1 To MaxObjetos Do
	    If (Objeto[I].CriaObjeto[Jogador.X, Jogador.Y]) Then // SE PLAYER ENTROU NUMA COORDENADA DE UM OBJETO
	    Begin
	      ObjetoSuport.X[I] := Jogador.X; // SALVA AS COORDS 
		  ObjetoSuport.Y[I] := Jogador.Y; // PARA SER USADO QUANDO O PLAYER SAIR DESSAS COORDS
		  Inc(J); // ATIVA O SISTEMA
	    End;

	  If (J > 0) Then
		For I := 1 To J Do
		Begin
          If (Jogador.X <> ObjetoSuport.X[I]) Or (Jogador.Y <> ObjetoSuport.Y[I]) Then // SE PLAYER SAIR DA COORDS DO OBJETO ENTAO REDESENHE OBJETO
  		    DesenhaXY(CorObstac, #177, ObjetoSuport.X[I], ObjetoSuport.Y[I]); // << PROBLEMA AQUI.
		  If (I = J) Then J := 0; // RESETA
		End;

O código funciona, se eu retirar esse comando:

Citação

DesenhaXY(CorObstac, #177, ObjetoSuport.X, Objeto Suport.Y );

Ma s s em ele, n ã o d á para eu re-de s enhar na s coordenada s exata s . Ca s o tenha ficado um pouco confu s o, e voc ê n ã o tenha con s eguido entender, e s tou tentando criar um m é todo   que ir á varrer uma á rea na tela de forma eficaz, procurando objeto s que j á exi s tem no jogo, e que   o jogador pa s s ou por cima, a fim de re-de s enhar o s objeto s .

E s tive a de s envolver outro m é todo, ma s ele u s a muito s For..Do atrapalhando o   decr é s cimo do tempo de habilidade s no meu jogo, n ã o é muito percept í vel a n ã o s er que haja um n ú mero muito grande de objeto s criado s . Olhem:

	  For I := 1 To MaxObjetos Do
	    If (Objeto[I].CriaObjeto[Jogador.X, Jogador.Y]) Then 
	    Begin
	      Objeto[I].ReDesenhaObjeto[Jogador.X, Jogador.Y] := True;
		  Inc(J);
	    End;	  

	  If (J > 0) Then
	    For X := TelaX_Min To TelaX_Max Do
	      For Y := TelaY_Min To TelaY_Max Do
		    For I := 1 To MaxObjetos Do
              If (Objeto[I].ReDesenhaObjeto[X, Y]) And ((Jogador.X <> X) Or (Jogador.Y <> Y)) Then
			  Begin
			    Objeto[I].ReDesenhaObjeto[X, Y] := False;
			    DesenhaXY(CorObstac, #177, X, Y);
			    If (I = MaxObjetos) Then J := 0;
		      End;

S ã o nece s s á rio s 3 For..Do, atra s a um pouco o   programa.

Enfim, tentei muita s coi s a s para fazer o primeiro m é todo funcionar,   ma s ainda s im n ã o funciona. Poderia me dar alguma s uge s t ã o?

De s de j á , agrade ç o!

Morituru s te s aluto!

Edited by Gabriel Gomes
Fix
Posted

Problema resolvido. (ALELUIA!!!!!!!!!!!!!!!) 😛

Solução:

	  For I := 1 To MaxObjetos Do
	    If (Objeto.X[I] = Jogador.X) And (Objeto.Y[I] = Jogador.Y) Then
	    Begin
		  Objeto.R_X[I] := Jogador.X;
		  Objeto.R_Y[I] := Jogador.Y;
	    End;	
		
	  For I := 1 To MaxObjetos Do
          If (Objeto.R_X[I] > 0) And (Objeto.R_Y[I] > 0) Then
  		    If (Jogador.X <> Objeto.R_X[I]) Or (Jogador.Y <> Objeto.R_Y[I]) Then Begin
			  X := Objeto.R_X[I];
			  Y := Objeto.R_Y[I];
			  DesenhaXY(CorObstac, #177, X, Y);
			End;

Código ficou perfeito!!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.