Jump to content
Yamix

Problemas com GoToXY e Matrizes

Recommended Posts

Yamix

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, ObjetoSuport.Y);

Mas sem ele, não dá para eu re-desenhar nas coordenadas exatas. Caso tenha ficado um pouco confuso, e você não tenha conseguido entender, estou tentando criar um método que irá varrer uma área na tela de forma eficaz, procurando objetos que já existem no jogo, e que  o jogador passou por cima, a fim de re-desenhar os objetos.

Estive a desenvolver outro método, mas ele usa muitos For..Do atrapalhando o decréscimo do tempo de habilidades no meu jogo, não é muito perceptível a não ser que haja um número muito grande de objetos criados. 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 necessários 3 For..Do, atrasa um pouco o programa.

Enfim, tentei muitas coisas para fazer o primeiro método funcionar, mas ainda sim não funciona. Poderia me dar alguma sugestão?

Desde já, agradeço!

Moriturus te saluto!

Edited by Gabriel Gomes
Fix

Share this post


Link to post
Share on other sites
Yamix

Problema resolvido. (ALELUIA!!!!!!!!!!!!!!!) :P

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!!

Share this post


Link to post
Share on other sites

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.