这是我家狗
- 我同意你的观点
- 我说的聪明和蠢不是针对你,我想指的是那一类人,抱歉没有表达清楚,但是那一类人中有没有你我就不关心了
- 感谢你出来平息事件
学做过3D动画的应该都知道, IK, FK, 正向动力学, 反向动力学。 是基础的知识概念。
这与硬凹出个名词来是不同的。
怎么哪都有你?你是吃瓜小王子啊,看到你,就有瓜吃了。 
始终在吃瓜前线 
对了,你们嘲笑我我真的不在乎,心里一点波动都没有,我不是小孩,早就不在乎别人的看法了。你们如果想让我难受,你们就把你们的烂代码拿出来,我看不了烂代码,我看到烂代码会头痛,给你们的友情提示。
不带代码的贴我不会再回复了(但是会看,看你们气急败坏的样子),不想浪费时间,而且手也累了。
心里没有波动就不会在这BB了。
- 你在指责楼主把问题复杂化而让你愤怒
- 楼主的文章是5年前的
- 楼主的文章并没收钱,是分享的。
- 如果你遇到有困惑,不妨直接在楼层请教,如有更好的建议,建议你用更好的措辞提出解决方案,让更多和你一样有同样困惑的人,因为你的建议而拨云见日。
理解但不赞同。技术分享本来就是自愿的行为,就像捐款一样,你总不能指责别人捐的少吧?看到不满意或者不对的答案你可以发表自己的观点和建议,但是吐槽和抱怨纯属无效沟通浪费时间。
名词的含义难道不是更便于交流嘛?楼主明显是教学的,都解释了名词的含义了。你这明显是自己狭隘了,单纯觉得别人炫技、装B。如果不用名词,那三角函数为什么要有cos、sin、tan,大家都说这个边比那个边嘛?
鸦哥,分享还要躺枪 
- 你跟我们讨论的不是同一个问题,你这个是真模拟(物理引擎的模拟),这里讨论的是假模拟,不带任何物理效果。
- 你这种方法模拟出来很真实,但是非常消耗性能,性能其实都不重要,重要的是关节多了之后cocos的物理引擎容易崩溃。
- 你试试用50个紧挨着的圆形之间用关节连在一起模拟一下,稍微移动一下就崩溃了。
- 你试试用10个圆形,每个圆形之间间隔一定距离来模拟。你会发现每两个圆形之间的间隔还得用直线来绘制,那就不像绳子了。
- 你试试用10个紧挨着的长条矩形,之间用关节连在一起,来模拟。你会发现只有限制了关节旋转角度在正负20度的时候才会比较真实。但是真实的绳子,每个节点之间是没有角度限制的。
- 这里讨论的是假模拟,不依靠物理引擎,节点可以任意多,在我的电脑上1000个节点没有任何压力。用1000个紧挨着的小圆点来模拟一条绳子,你觉得会不会很真实呢?但是没有物理效果。
我同意你的第1条观点,接收到了第2.3条观点,不认同你的第4条观点,因为我是带着解决方案骂的街。所以你想给我传达的意思是,骂人是不对的,是吧?
我同意我狭隘,我不同意你的其他观点。
原来带着解决方案就可以骂街吗
我按lz的方法十分钟写出来了, 比你写的简单多了, 你自己看不懂就来骂分享的?完了自己弄出来在这秀优越感吗
带着解决方案不可以骂街,我错了。
但是以后我看到没有意义的代码我还是会骂。
不仅是别人的代码,我自己的代码我也会骂。
如果你看了原文,你会知道我没有在秀优越感,如果秀优越感,我会着重强调我的方案哪里好,但是我并没有。我只是把子节点跟随父节点的逻辑写了出来,扔在哪里给其他人看。
把你的方案拿出来,给大家用一下。
感谢
lineTestUI.ts
import * as cc from 'cc';
import {lineTestRope} from './lineTestRope';
const {ccclass,property} = cc._decorator;
@ccclass('lineTestUI')
export class lineTestUI extends cc.Component {
_touchLocation: cc.Vec2;
_arrayRope: cc.Node[] = [];
start () {
let root = this.node.getChildByPath("root");
this._arrayRope = root.children;
for (let i = 0;i < this._arrayRope.length;i++) {
if (!this._arrayRope[i].getComponent(lineTestRope)) {
this._arrayRope[i].addComponent(lineTestRope);
}
}
}
protected onEnable (): void {
this.node.on(cc.Node.EventType.TOUCH_START,this.onTouchMove,this);
this.node.on(cc.Node.EventType.TOUCH_MOVE,this.onTouchMove,this);
}
/**触摸移动 */
onTouchMove (event: cc.EventTouch) {
let start_pos = event.getUILocation();
this._touchLocation = start_pos;
this.calcNodePos();
}
/**计算节点位置 */
calcNodePos () {
for (let index = this._arrayRope.length - 1;index >= 0;index--) {
let script = this._arrayRope[index].getComponent(lineTestRope);
if (index == this._arrayRope.length - 1) {
script.calcSelf(this._touchLocation);
} else {
let last = this._arrayRope[index + 1].getComponent(lineTestRope);
script.calcSelf(last.getSelfPoint());
}
script.calcTarget();
}
}
}
lineTestRope.ts
import * as cc from 'cc';
const { ccclass, property } = cc._decorator;
@ccclass('lineTestRope')
export class lineTestRope extends cc.Component {
_ptSelf: cc.Vec2;
_angle: number;
_length: number;
_ptTarget: cc.Vec2;
start() {
let pos = this.node.getWorldPosition();
this._ptSelf = cc.v2(pos.x,pos.y);
this._ptTarget = cc.v2(pos.x,pos.y);
this._length = 30;
}
/**传目标节点位置和自身节点计算自身节点位置 */
calcSelf (ptTarget: cc.Vec2) {
let target_pos = ptTarget.clone();
let dir = target_pos.subtract(this._ptSelf).normalize();
this._angle = Math.atan2(dir.y,dir.x);
dir = dir.multiplyScalar(-1 * this._length);
this._ptSelf = ptTarget.add(dir);
this.node.setWorldPosition(this._ptSelf.x,this._ptSelf.y,0);
}
/**根据自身节点坐标算出目标节点坐标 */
calcTarget () {
let dx = this._length * Math.cos(this._angle);
let dy = this._length * Math.sin(this._angle);
this._ptTarget = cc.v2(this._ptSelf.x + dx,this._ptSelf.y + dy);
}
getSelfPoint () {
let pos = this.node.getWorldPosition();
return cc.v2(pos.x,pos.y);
}
getTargetPoint () {
return this._ptTarget;
}
}
照着写的, 我写的烂
就是看你原文了哥们, 一晚上没弄出来给你弄着急了
