// Update is called once per frame void Update() { for (var i = 0; i < columns.Count; i++) { Debug.Log(i + "\tcolumn:" + columns[i].mytoString()); } ms.clear(); if (this.flag) { GetComponent <Rigidbody2D>().velocity = (this.mouseWorldPos - transform.position) * 10; } else { if (Vector3.Distance(transform.position, this.columns[this.columns.Count - 1].preTangentWorldPos) < 1) { this.GetComponent <Rigidbody2D>().velocity = (this.columns[this.columns.Count - 1].preTangentWorldPos - transform.position) * 10; } else { this.GetComponent <Rigidbody2D>().velocity = (this.columns[this.columns.Count - 1].preTangentWorldPos - transform.position).normalized * 100; } } RaycastHit2D[] results; if (this.columns.Count > 1) { //获取上一个柱子切点 //var p=CalcQieDian(this.columns[this.columns.Count-1].columnWorldPos,this.transform.position,this.columns[this.columns.Count-1].column.transform.localScale.x/10,this.columns[this.columns.Count-1].preTangentWorldPos); //this.columns[this.columns.Count-1].preTangentWorldPos=p; //Debug.DrawLine(transform.position, this.columns[this.columns.Count-1].preTangentWorldPos, Color.red, Vector3.Distance(transform.position,this.columns[this.columns.Count-1].preTangentWorldPos)); results = Physics2D.RaycastAll(transform.position, this.columns[this.columns.Count - 1].preTangentWorldPos - transform.position, Vector3.Distance(transform.position, this.columns[this.columns.Count - 1].preTangentWorldPos)); //var results=cc.director.getPhysicsManager().rayCast(transform.position,this.columns[this.columns.Count-1].preTangentWorldPos,cc.RayCastType.Closest); } else { //Debug.DrawLine(transform.position, this.columns[this.columns.Count-1].startWorldPos, Color.red, Vector3.Distance(transform.position,this.columns[this.columns.Count-1].startWorldPos)); results = Physics2D.RaycastAll(transform.position, this.columns[this.columns.Count - 1].startWorldPos - transform.position, Vector3.Distance(transform.position, this.columns[this.columns.Count - 1].startWorldPos)); //grounded = Physics.Raycast(transform.position, this.columns[this.columns.Count-1].startWorldPos); //var results = cc.director.getPhysicsManager().rayCast(transform.position,this.columns[this.columns.Count-1].startWorldPos,cc.RayCastType.Closest); } for (var i = 0; i < results.Length; i++) { Debug.Log(i + "\t result:" + results[i].transform.name); } //朝切点发射射线检测 Debug.Log(results); if (results.Length > 1) { //this.c0=results[0].collider.node.name; var col = results[1].collider.gameObject; if (col != this.columns[this.columns.Count - 1].column) { //Debug.Log("radius:"+col.transform.localScale.x/10); //Debug.Log("point"+results[1].point); var sp = this.CalcQieDian(col.transform.position, this.transform.position, col.transform.localScale.x / 10, results[1].point); Debug.Log("sp:" + sp); var nc = new myColumn(col, sp); this.columns.Add(nc); //nc.column.GetComponent('columnScr').onLight(); } else { //再次碰到原来的column this.newTangentP = this.CalcQieDian(this.columns[this.columns.Count - 1].columnWorldPos, transform.position, this.columns[this.columns.Count - 1].column.transform.localScale.x / 10, this.columns[this.columns.Count - 1].preTangentWorldPos); if (this.columns[this.columns.Count - 1].rad * (this.columns[this.columns.Count - 1].rad + this.radTwoPOnR(this.columns[this.columns.Count - 1].preTangentWorldPos, this.newTangentP, this.columns[this.columns.Count - 1].columnWorldPos)) < 0) { //console.log("!!!!!pop"); var c = this.columns[this.columns.Count - 1]; this.columns.Remove(this.columns[this.columns.Count - 1]); if (this.ifOnlyColumn(c.column) == 0) { //只有一份c.column //c.column. GetComponent('columnScr').cancelLight(); } } else { this.columns[this.columns.Count - 1].rad += this.radTwoPOnR(this.columns[this.columns.Count - 1].preTangentWorldPos, this.newTangentP, this.columns[this.columns.Count - 1].columnWorldPos); this.columns[this.columns.Count - 1].preTangentWorldPos = this.newTangentP; } } } else { if (this.columns.Count > 1) { this.newTangentP = this.CalcQieDian(this.columns[this.columns.Count - 1].columnWorldPos, transform.position, this.columns[this.columns.Count - 1].column.transform.localScale.x / 10, this.columns[this.columns.Count - 1].preTangentWorldPos); if (this.columns[this.columns.Count - 1].rad * (this.columns[this.columns.Count - 1].rad + this.radTwoPOnR(this.columns[this.columns.Count - 1].preTangentWorldPos, this.newTangentP, this.columns[this.columns.Count - 1].columnWorldPos)) < 0) { //console.log("!!!!!pop"); var c = this.columns[this.columns.Count - 1]; this.columns.Remove(this.columns[this.columns.Count - 1]); if (this.ifOnlyColumn(c.column) == 0) { //只有一份c.column //c.column. getComponent('columnScr').cancelLight(); } } else { this.columns[this.columns.Count - 1].rad += this.radTwoPOnR(this.columns[this.columns.Count - 1].preTangentWorldPos, this.newTangentP, this.columns[this.columns.Count - 1].columnWorldPos); this.columns[this.columns.Count - 1].preTangentWorldPos = this.newTangentP; } } } if (this.columns.Count > 1) { /*for(var i=1;i<this.columns.Count-1;i++){ * this.columns[i].column.getComponent('columnScr').onLight(); * }*/ //var pz=this.columns[this.columns.Count-1].startWorldPos-v2Tov3( rotateVec2( (this.columns[this.columns.Count-1].columnWorldPos),(this.columns[this.columns.Count-1].rad/2)))+(this.columns[this.columns.Count-1].columnWorldPos); var pz = v2Tov3(rotateVec2(this.columns[this.columns.Count - 1].startWorldPos - (this.columns[this.columns.Count - 1].columnWorldPos), (this.columns[this.columns.Count - 1].rad / 2))) + (this.columns[this.columns.Count - 1].columnWorldPos); var pzno = pz - (this.columns[this.columns.Count - 1].columnWorldPos); //以下防止绳子没从柱子上下来 if (Mathf.Abs(this.columns[this.columns.Count - 1].rad) < (Math.PI * 2) - 0.5) { if (Vector3.Dot(pzno.normalized, ((this.columns[this.columns.Count - 2].preTangentWorldPos - (this.columns[this.columns.Count - 1].startWorldPos)).normalized)) > 0) { //console.log("!!!!!pop dot"); var c = this.columns[this.columns.Count - 1]; this.columns.Remove(this.columns[this.columns.Count - 1]); if (this.ifOnlyColumn(c.column) == 0) { //只有一份c.column //c.column. getComponent('columnScr').cancelLight(); } } } } this.ms.Width = this.lineWidth; this.ms.moveTo(transform.position); for (int i = this.columns.Count - 1; i > 0; i--) { var nor = (this.columns[i].preTangentWorldPos - this.columns[i].columnWorldPos).normalized; var po = this.columns[i].preTangentWorldPos + (nor * (this.lineWidth / 2)); this.ms.lineTo(new Vector2(po.x, po.y)); //对第i个柱子画弧 if (Mathf.Abs(this.columns[i].rad) >= Math.PI * 2) { if (this.columns[i].rad > 0) { //顺时针绕上柱子,但线要逆时针从结点向起始点画 this.ms.circle(this.columns[i].columnWorldPos, this.columns[i].column.transform.localScale.x / 10 + this.lineWidth / 2, 0, Mathf.PI * 2, false); } else { this.ms.circle(this.columns[i].columnWorldPos, this.columns[i].column.transform.localScale.x / 10 + this.lineWidth / 2, Mathf.PI * 2, 0, true); } this.ms.moveTo(this.columns[i].startWorldPos); } else if (Mathf.Abs(this.columns[i].rad) != 0) { var strad = this.radOnePointOnCircle(this.columns[i].preTangentWorldPos, this.columns[i].columnWorldPos); this.ms.circle(this.columns[i].columnWorldPos, this.columns[i].column.transform.localScale.x / 10 + this.lineWidth / 2, strad, strad + this.columns[i].rad, this.columns[i].rad < 0); } var norSt = (this.columns[i].startWorldPos - (this.columns[i].columnWorldPos)).normalized; var poSt = this.columns[i].startWorldPos + (norSt * (this.lineWidth / 2)); this.ms.moveTo(poSt); } this.ms.lineTo(ropeStart.position); //this.ms.fillColor = cc.Color.YELLOW; //var q=this.CalcQieDian(this.ci.parent.convertToWorldSpaceAR(this.ci.position),transform.position,20); //this.ms.circle(this.node.convertToNodeSpaceAR(q).x,this.node.convertToNodeSpaceAR(q).y,5); this.ms.stroke(); }