- 你在指责楼主把问题复杂化而让你愤怒
- 楼主的文章是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;
}
}
照着写的, 我写的烂
就是看你原文了哥们, 一晚上没弄出来给你弄着急了
- getTargetPoint这个函数有什么用?
- _ptTarget这个数据谁用了?
- 这个逻辑复杂到要拆分出lineTestRope.ts这个文件吗?
- 你拆分出了lineTestRope.ts这个文件,告诉我你要在那种情况下复用它?
- 你写一堆没有的代码,是在给准备看你代码的人挖的坑吗?
- 你是想要分享给其他人看,还是想自己做个笔记?
- 如果是想做自己的笔记,去用印象笔记。
- 如果你想给别人看,请把你的代码打扮的干净利落。
额, 因为我只抄了lz的根节点自由的实现代码, 但复制的时候都复制了, 那个数据和函数是约束根节点的代码里面的, 你这挑刺可以, 认
写着玩的, 帖子我收藏了, 想用的时候随时改写一个很简单
活久见,你们要用技术一较高下么,这么玩我真插不上话了
我不是针对谁,我是说在座的各位,写的都不能真正商用,太小朋友过家家了
写着玩的哥, 就是看他看别人分享的看不明白还攻击人,我也是闲的
不玩了, 拼ui去了
哈哈我说着玩的,这个要好好写至少半天时间,还不如打几盘游戏
复制我的代码到cocos中
把摄像机托到代码的camera属性上
运行
以上步骤只需要3分钟
在你关注的地方debug
看懂并理解这个逻辑大概需要5分钟
所以你只需要8分钟
你们不要再打啦!!!
1 这是一篇技术分享贴,非商用,纯白■,我们应当感谢分享的人
2 我赞成你说的"不把简单的问题复杂化",复杂的东西不利于学习和传播
发帖的人确实应该整理下帖子再发出来
3 你部分言辞过于激进,容易打击分享帖子人的积极性,如果我以后发分享贴,可能会面临非常严厉的指责,那我大概率选择不发.
我话讲完,谁赞成? 谁反对?
