Code kontrollieren



  • Kann bitte jemand diesen Code kontrollieren?

    void	LoadTextureResources(String^	Path){
    			if(!Path->EndsWith("\\"))Path+="\\";
    			array<String^>^	Files=IO::Directory::GetFiles(Path,"*.trp");
    					String^	iname;
    					String^	tname;
    					unsigned __int16 x,y,w,h;
    					int		p,q;
    
    			//**	Alle Dateien im Ordner		**//
    			for(int File=0;File<Files->Length;++File){
    				array<Byte>^	b=IO::File::ReadAllBytes(Files[File]);
    
    				unsigned __int16 lon=b[0]<<8|b[1];
    				unsigned __int16 cor=b[2]<<8|b[3];
    				tname=StringFormByteArray(b,4,lon);
    				unsigned __int16 Start=4+lon;
    				unsigned __int16 Start2;
    
    				//**	Textur in Datei neu		**//
    				if(FirstIndexOf(textureNames,tname)==-1){
    					p=pt++;
    					textures[p]=gcnew HgeNet::Texture(engine,Path+tname);
    					textureNames[p]=tname;
    				}
    				//**	Für alle Sprites die in der Datei definiert sind	**//
    				for(unsigned __int16 i=0;i<cor;){
    					unsigned __int16 losn=b[Start+0]<<8|b[Start+1];
    					iname=StringFormByteArray(b,Start+i+2,losn);
    					//**	Wenn das Sprite noch nicht vorhanden ist	**//
    					if(FirstIndexOf(spriteNames,iname)==-1){
    					Start2=Start+i+2+losn;
    					x=b[Start2+0]<<8|b[Start2+1];
    					y=b[Start2+2]<<8|b[Start2+3];
    					w=b[Start2+4]<<8|b[Start2+5];
    					h=b[Start2+6]<<8|b[Start2+7];
    
    					q=ps++;
    					sprites[q]=gcnew HgeNet::Sprite(engine,textures[p],Drawing::RectangleF(x,y,w,h));
    					spriteNames[q]=iname;
    					}
    
    					i+=losn+9;
    				}
    			}
    		}
    

    FirstIndexOf und StringFromByteArray

    int	FirstIndexOf(array<String^>^	a,String^	s){
    
    		for(int i=0;i<a->Length;++i)if(a[i]==s)return i;
    		return -1;
    	}
    	String^	StringFormByteArray(array<Byte>^	b,unsigned int start,unsigned int length){
    		char* c=new char[length];
    		for(unsigned int i=0;i<length;++i){
    			c[i]=(char)(b[start+i]);
    		}
    		return gcnew String(c);
    	}
    


  • Habs jetzt kontolliert also ist nicht mehr nötig



  • Deine Hilfsfunktionen FirstIndexOf und StringFromByteArray kannst du getrost in die Tonne treten und statt dessen Net Funktionen verwenden. Array.IndexOf() und Encoding.GetString().

    Auch solltest du in .Net Programmen auch .Net Datentypen verwenden, in deinem Fall also Uint16 und nicht unsigned __int16.



  • Ja mit Array.IndexOf hast du Recht, aber bei Encoding.GetString bin ich mir nicht so sicher, ob er jetzt Unicode Lesen will oder ASCII aber einfacher ist es sicherlich, diese Funktionen zu benutzen, ich werd den Code dann noch ein bisschen umschreiben

    Die dateitypen werden übrigens automatisch umkonvertiert und __int16 ist nur ein Platzhalter für Int16, man hat nämlich alle Funktionen der Value Class auch mit unsigned __int16 😉


Anmelden zum Antworten