需要一个循环的帮助 [英] Need help with a loop

查看:73
本文介绍了需要一个循环的帮助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

喂! 。我需要帮助编码一些东西



我正在读一个有道路的游戏文件,道路是4个顶点的部分



所以我正在做的是一次读8并建立一个部分



Hey! . I need help coding something

I'm reading a game file with roads, and the roads are in sections of 4 vertices

So what I am doing is reading 8 at a time and building a section

if (type == 0) {
	//Road

	UInt16 sections = Convert.ToUInt16 (subtype);
	if (subtype == 0) {
		sections = r.ReadUInt16();
	}
	//Debug.Log ("Road with " + sections + " sections [block " + i + "]");
	bool invalid =  false;
	if(sections == 1 || sections % 2 > 0){


		Debug.Log ("INVALID ROAD" + sections );
		invalid = true;
	}
	Debug.Log ("Road with sections : "  + sections);
	if(invalid || !invalid){
	goto skipRead; //road reading f***ed I'll do it later
	}
	//sections /= 2; //Read and build 2 sections at a time

	Debug.Log ("New sections " +sections);
	List<Vector3> secVerts = new List<Vector3>();
	for(int j = 1; j <= sections ; j++){
		Vector3 v1 = vertexes[r.ReadUInt16 ()]; //Outer sidewalk vertex
		Vector3 v2 = vertexes[r.ReadUInt16 ()]; //Outer road vertex
		Vector3 v3 = vertexes[r.ReadUInt16 ()]; //Inner road vertex
		Vector3 v4 = vertexes[r.ReadUInt16 ()]; //Inner sidewalk vertex

			secVerts.Add (v1);
			secVerts.Add (v2);
			secVerts.Add (v3);
			secVerts.Add (v4);

		}


	for (int j = 0; j < sections ;   j += 2) {

		Mesh m = new Mesh();
		List<Vector3> rdvertexes = new List<Vector3 >();
		List<Vector2> rduvs = new List<Vector2 >();
	//	Vector3 v1 = vertexes[r.ReadUInt16 ()]; //Outer sidewalk vertex
//		Vector3 v2 = vertexes[r.ReadUInt16 ()]; //Outer road vertex
//			Vector3 v3 = vertexes[r.ReadUInt16 ()]; //Inner road vertex
//				Vector3 v4 = vertexes[r.ReadUInt16 ()]; //Inner sidewalk vertex
//					Vector3 v5 = vertexes[r.ReadUInt16 ()]; //Same as above 4
//						Vector3 v6 = vertexes[r.ReadUInt16 ()];
//							Vector3 v7 = vertexes[r.ReadUInt16 ()];
//								Vector3 v8 = vertexes[r.ReadUInt16 ()];
	Vector3 v1 =  secVerts[j];
	Vector3 v2 =  secVerts[j + 1];
	Vector3 v3 =  secVerts[j + 2];
	Vector3 v4 =  secVerts[j + 3];
	Vector3 v5 =  secVerts[j + 4];
	Vector3 v6 =  secVerts[j + 5];
	Vector3 v7 =  secVerts[j + 6];
	Vector3 v8 =  secVerts[j + 7];
		//First sidewalk face
		rdvertexes.Add (v1);
		rdvertexes.Add (v5);
		rdvertexes.Add (new Vector3(v6.x,v5.y,v6.z));
		rdvertexes.Add (new Vector3(v2.x,v1.y,v2.z));
		rduvs.Add (new Vector2(1,0));
		rduvs.Add (new Vector2(0,0));
		rduvs.Add (new Vector2(0,1));
		rduvs.Add (new Vector2(1,1));
		//First Sidewalk side face 4 5 6 7
		rdvertexes.Add (new Vector3(v6.x,v5.y,v6.z));
		rdvertexes.Add (new Vector3(v2.x,v1.y,v2.z));
		rdvertexes.Add (v2);
		rdvertexes.Add (v6);
		rduvs.Add (new Vector2(0,1));
		rduvs.Add (new Vector2(0,0));
		rduvs.Add (new Vector2(1,0));
		rduvs.Add (new Vector2(1,1));
		//Road Face 8 9 10 11
		rdvertexes.Add (v2);  // bottom left
		rdvertexes.Add (v6); //top left
		rdvertexes.Add (v7); // top right
		rdvertexes.Add (v3); // bottom right
		/*
		rduvs.Add (new Vector2(0,1));
		rduvs.Add (new Vector2(0,0));
		rduvs.Add (new Vector2(2,0));
		rduvs.Add (new Vector2(2,1));
		*/
		rduvs.Add (new Vector2(1,0));
		rduvs.Add (new Vector2(0,0));
		rduvs.Add (new Vector2(0,1));
		rduvs.Add (new Vector2(1,1));

		//Second sidewalk face
		rdvertexes.Add (new Vector3(v3.x,v4.y,v3.z)); //Bottom left
		rdvertexes.Add (new Vector3(v7.x,v8.y,v7.z)); //Top left
		rdvertexes.Add (v8); //Top right
		rdvertexes.Add (v4); //Bottom right


		rduvs.Add (new Vector2(0,1));
		rduvs.Add (new Vector2(0,0));
		rduvs.Add (new Vector2(1,0));
		rduvs.Add (new Vector2(1,1));

		//Second Sidewalk side face 
		
		rdvertexes.Add (new Vector3(v6.x,v5.y,v6.z)); //top right
		rdvertexes.Add (new Vector3(v2.x,v1.y,v2.z)); //top left
		rdvertexes.Add (v2); //bottol left
		rdvertexes.Add (v6); //bottom right

		
		rduvs.Add (new Vector2(1,1));
		rduvs.Add (new Vector2(0,1));
		rduvs.Add (new Vector2(0,0));
		rduvs.Add (new Vector2(1,0));

		m.vertices = rdvertexes.ToArray ();
		m.uv = rduvs.ToArray ();
		m.subMeshCount = 2;
		m.SetTriangles (new int[]{9,8,11,11,10,9,5,6,7,7,4,5},0);
		m.SetTriangles (new int[]{1,0,3,3,2,1,},1);
		m.RecalculateNormals ();

		GameObject go = new GameObject("Road [" + i  + "," + j + "]");
		go.AddComponent<MeshRenderer>();
		go.AddComponent<MeshFilter>();
		go.GetComponent<MeshFilter>().mesh = m;

	}


	//m.SetTriangles (new int[]{7,6,5,5,4,7},0);
	goto doneRead;
skipRead:;
	r.ReadBytes(sections * 8);
			doneRead:;

} else if (type == 1) {
	//Sidewalk Strip
	Int16 sections = subtype;
	if (subtype == 0) {
		sections = r.ReadInt16();
	}
	sections *= 2;

	for (int j = 1; j <= sections; j++) {
		r.ReadInt16 ();
	}

	//r.ReadBytes(sections * 4)
} else if (type == 2) {
	//Road walkkway thing
	
	Int16 sections = subtype;
	if (subtype == 0) {
		sections = r.ReadInt16();
	}
	goto skipRead;
	//Debug.Log ("Road with " + sections + " sections [block " + i + "]");
	sections /= 2; //Read and build 2 sections at a time
	Debug.Log ("New sections " +sections);
	Mesh m = new Mesh();
	List<Vector3> rdvertexes = new List<Vector3 >();
	List<Vector2> rduvs = new List<Vector2 >();
	for (int j = 1; j <= sections; j++) {
		
		Vector3 v1 = vertexes[r.ReadInt16 ()]; //Outer sidewalk vertex
		Vector3 v2 = vertexes[r.ReadInt16 ()]; //Outer road vertex
		Vector3 v3 = vertexes[r.ReadInt16 ()]; //Inner road vertex
		Vector3 v4 = vertexes[r.ReadInt16 ()]; //Inner sidewalk vertex

		//one face
		rdvertexes.Add (v1);
		rdvertexes.Add (v2);
		rdvertexes.Add (v3);
		rdvertexes.Add (v4);
							
		
		
		rduvs.Add (new Vector2(1,0));
		rduvs.Add (new Vector2(0,0));
		rduvs.Add (new Vector2(0,1));
		rduvs.Add (new Vector2(1,1));

		m.vertices = rdvertexes.ToArray ();
		m.uv = rduvs.ToArray ();
		m.subMeshCount = 1;
		m.RecalculateNormals ();

		m.SetTriangles (new int[]{0,1,2,2,1,0},0);
		
	}



	//m.SetTriangles (new int[]{7,6,5,5,4,7},0);
	GameObject go = new GameObject("Walkway");
	go.AddComponent<MeshRenderer>();
	go.AddComponent<MeshFilter>();
	go.GetComponent<MeshFilter>().mesh = m;
	goto doneRead;
skipRead:;
	r.ReadBytes(sections * 8);
			doneRead:;
}







但是当我读到一些不是2的倍数:/



基本上我想知道的是如何制作循环以便计算机执行此操作

Build第0节到第1节,构建第1节到第2节,构建第2节到第3节完成。但它没有这样做:/




But it is encountering an issue when I read something that isn't a multiple of 2 :/

Basically what I want to know is how would I make the loop so the computer does this
"Build section 0 to 1, build section 1 to 2, build section 2 to 3" done. But It's not doing that :/

推荐答案

这篇关于需要一个循环的帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆