- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人知道类似电缆(或基本上任何绳子或绳索)行为的好例子吗?
我目前正在编写一个半模块化合成器。我正在使用 Raphael.js 作为电缆。但它们似乎太僵硬了。我想添加一些物理,所以当我拖动一端而另一端没有连接时,另一端会下垂并以略微弯曲的方式移动。我想我正在寻找的是重力。
现在电缆的行为如下:
jsFiddle
使用此代码:
window.onload = function() {
var r = Raphael("cables", 1420, 795),
discattr = {
fill: "#aaa",
stroke: "#ddd"
};
function curve(x, y, ax, ay, bx, by, zx, zy, color) {
var movrattr = {
fill: color || Raphael.getColor(),
stroke: "none"
};
var path = [
["M", x, y],
["C", ax, ay, bx, by, zx, zy]
],
path2 = [
["M", x, y],
["L", ax, ay],
["M", bx, by],
["L", zx, zy]
],
curve = r.path(path).attr({
stroke: color || Raphael.getColor(),
"stroke-width": 4
}).shadow(),
controls = r.set(
r.path(path2).attr({
stroke: "none"
}),
r.circle(x, y, 7).attr(discattr).emboss(1).light(-100,-100,30,'#aaaaaa','diffuse'),
r.circle(ax, ay, 0).attr({
stroke: "none"
}),
r.circle(bx, by, 0).attr({
stroke: "none"
}),
r.circle(zx, zy, 7).attr(discattr).emboss(1).light(-100,-100,30,'#aaaaaa','diffuse')
),
mover = r.set(
r.circle(zx, zy + 9, 7).attr(movrattr)
);
mover[0].move = function(x, y) {
var X = this.attr("cx") + x,
Y = this.attr("cy") + y;
this.attr({
cx: X,
cy: Y
});
// path[1][5] = X;
// path[1][6] = Y;
// path2[3][2] = X;
// path2[3][3] = Y;
controls[1].update(x, y);
controls[4].update(x, y, true);
};
mover[0].update = function(x, y, dragging) {
if (!dragging) return false;
var X = this.attr("cx") + x,
Y = this.attr("cy") + y;
this.attr({
cx: X,
cy: Y
});
};
controls[1].update = function(x, y) {
var X = this.attr("cx") + x,
Y = this.attr("cy") + y;
this.attr({
cx: X,
cy: Y
});
path[0][3] = X;
path[0][4] = Y;
path2[0][4] = X;
path2[0][5] = Y;
controls[2].update(x, y);
};
controls[2].update = function(x, y) {
var X = this.attr("cx") + x,
Y = this.attr("cy") + y;
this.attr({
cx: X,
cy: Y
});
path[1][5] = X;
path[1][6] = Y;
path2[1][6] = X;
path2[1][7] = Y;
curve.attr({
path: path
});
controls[0].attr({
path: path2
});
};
controls[3].update = function(x, y) {
var X = this.attr("cx") + x,
Y = this.attr("cy") + y;
this.attr({
cx: X,
cy: Y
});
path[1][3] = X;
path[1][4] = Y;
path2[2][7] = X;
path2[2][8] = Y;
curve.attr({
path: path
});
controls[0].attr({
path: path2
});
};
controls[4].update = function(x, y, dragging) {
var X = this.attr("cx") + x,
Y = this.attr("cy") + y;
this.attr({
cx: X,
cy: Y
});
path[1][5] = X;
path[1][6] = Y;
path2[3][8] = X;
path2[3][9] = Y;
controls[3].update(x, y);
console.log(dragging)
if (dragging) return false;
mover[0].update(x, y, 'true');
};
controls.drag(move, up);
mover.drag(drag, up);
}
function move(dx, dy) {
this.update(dx - (this.dx || 0), dy - (this.dy || 0));
this.dx = dx;
this.dy = dy;
}
function drag(dx, dy) {
this.move(dx - (this.dx || 0), dy - (this.dy || 0));
this.dx = dx;
this.dy = dy;
}
function up() {
this.dx = this.dy = 0;
}
var newCable = function(){
curve(20, 20, 40, 270, 100, 270, 120, 20, "hsb(" + Math.random() + ", .75, .75)");
};
$('#newCable').on('click', newCable);
};
编辑
var r = Raphael("holder", window.innerWidth, window.innerHeight)
function findReflected(coord, about) {
var diff = about - coord;
return about + diff;
}
function curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, cx3, cy3, x3, y3, color) { //zx --x1
var cx2b = findReflected(cx2, x2),
cy2b = findReflected(cy2, y2),
path = [
["M", x1, y1],
["C", cx1, cy1, cx2, cy2, x2, y2, "S", cx3, cy3, x3, y3]
],
path2 = [
["M", x1, y1],
["L", cx1, cy1],
["M", cx2, cy2],
["L", cx2b, cy2b],
["M", x3, y3],
['L', cx3, cy3]
],
curve = r.path(path).attr({
stroke: color || Raphael.getColor(),
"stroke-width": 4,
"stroke-linecap": "round"
}),
controls = r.set(
r.path(path2).attr({
stroke: "none"
}),
r.circle(x1, y1, 7).attr({
fill: "#ccc",
stroke: "none"
}),
r.circle(cx1, cy1, 5).attr({
fill: "transparent",
stroke: "none"
}),
r.circle(cx2, cy2, 5).attr({
fill: "transparent",
stroke: "none"
}),
r.circle(x2, y2, 5).attr({
fill: "transparent",
stroke: "none"
}),
r.circle(cx2b, cy2b, 5).attr({
fill: "transparent",
stroke: "none"
}),
r.circle(cx3, cy3, 5).attr({
fill: "transparent",
stroke: "none"
}),
r.circle(x3, y3, 7).attr({
fill: "#ccc",
stroke: "none"
})
);
controls[1].update = function (x, y) {
var X = this.attr("cx") + x,
Y = this.attr("cy") + y;
this.attr({
cx: X,
cy: Y
});
path[0][1] = X;
path[0][2] = Y;
path2[0][1] = X;
path2[0][2] = Y;
controls[2].update(x, y);
};
controls[2].update = function (x, y) {
var X = this.attr("cx") + x,
Y = this.attr("cy") + y;
this.attr({
cx: X,
cy: Y
});
path[1][1] = X;
path[1][2] = Y;
path2[1][1] = X;
path2[1][2] = Y;
curve.attr({
path: path
});
controls[0].attr({
path: path2
});
};
controls[3].update = function (x, y, doReflect) {
var X = this.attr("cx") + x,
Y = this.attr("cy") + y;
this.attr({
cx: X,
cy: Y
});
path[1][3] = X;
path[1][4] = Y;
path2[2][1] = X;
path2[2][2] = Y;
curve.attr({
path: path
});
controls[0].attr({
path: path2
});
if (typeof doReflect === undefined || doReflect == null) controls[5].update(-x, -y, false);
};
controls[4].update = function (x, y) {
var X = this.attr("cx") + x,
Y = this.attr("cy") + y;
this.attr({
cx: X,
cy: Y
});
path[1][5] = X;
path[1][6] = Y;
controls[3].update(x, y, false);
controls[5].update(x, y, false);
};
controls[5].update = function (x, y, doReflect) {
var X = this.attr("cx") + x,
Y = this.attr("cy") + y;
this.attr({
cx: X,
cy: Y
});
path2[3][1] = X;
path2[3][2] = Y;
controls[0].attr({
path: path2
});
if (typeof doReflect === undefined || doReflect == null) controls[3].update(-x, -y, false);
};
controls[6].update = function (x, y) {
var X = this.attr("cx") + x,
Y = this.attr("cy") + y;
this.attr({
cx: X,
cy: Y
});
path[1][8] = X;
path[1][9] = Y;
path2[5][1] = X;
path2[5][2] = Y;
curve.attr({
path: path
});
controls[0].attr({
path: path2
});
};
controls[7].update = function (x, y) {
var X = this.attr("cx") + x,
Y = this.attr("cy") + y;
this.attr({
cx: X,
cy: Y
});
path[1][10] = X;
path[1][11] = Y;
path2[4][1] = X;
path2[4][2] = Y;
controls[1].update(x, y);
controls[4].update(x, y);
controls[6].update(x, y);
};
controls.drag(move, up);
var count = 0;
var shake;
$('circle:eq(6)').on('mousedown', function () {
shake = setInterval(function () {
count++;
if (count <= 4) {
controls[4].update(-1, 0);
controls[1].update(2, 0);
} else if (count <= 12) {
controls[4].update(1, 0);
controls[1].update(-2, 0);
} else if (count <= 16) {
controls[4].update(-1, 0);
controls[1].update(2, 0);
} else {
count = 0;
}
}, 30);
}).on('mouseup', function () {
clearInterval(shake);
});
}
function move(dx, dy) {
this.update(dx - (this.dx || 0), dy - (this.dy || 0));
this.dx = dx;
this.dy = dy;
}
function up() {
this.dx = this.dy = 0;
}
curve(100, 350, 100, 300, 100, 300, 100, 200, 100, 100, 100, 50, "hsb(0.2, 0.7, 0.8)");
这是我目前正在处理的屏幕截图。
最佳答案
在过去的几年里,我多次遇到过这个问题。因为我自己一直在寻找一个很好的解决方案。到目前为止我还没有发现任何有形的东西,所以我想出了自己的:
o-o-o-o-o
d3.line().curve(d3.curveBasis)
或类似的会为你做到这一点。 关于javascript - SVG - 示例 |物理电缆(重力),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18291603/
我正在制作一个 2D Java 游戏,我正在尝试找出如何添加基本的“重力” 我当前的代码是这样的: public void checkCollision() { Rectangle p
如何动态设置重力? Bitmap bmp; im = new ImageView (this); bmp=getbmp(img); im.setImageBitmap(bmp); 现在我想把图片放在
我编写了一个简单的代码来获取跳球的位置,但我肯定错过了一些东西,因为我得到了这个: 这是获取 x 和 y 位置的代码: public Vector2f[] draw() { float x =
我正在开发我的第一个 XNA 2D 游戏,但遇到了一个小问题。如果我跳,我的 Sprite 会跳但不会倒下。我还有另一个问题,用户可以按住 spacebar 跳到他想要的高度,我不知道如何阻止他这样做
在 xml 布局中,设置了 TextView 的重力。在某些情况下,我想在我的编码中更改 TextView 的重力。我尝试这样设置: title.setGravity(Gravity.START);
好吧,我正在使用 andengine 和 box2d 扩展你看,我的物体从地面(红色矩形)飞到相机的屋顶(黄色),我不明白这是怎么回事 这是我的代码的一部分, @Override public Eng
我正在使用 Box2d 模拟自上而下的空间环境。我有一个应用了脉冲的物体,它将在“行星”附近飞行(通过太空)。世界本身没有重力,但我想设置具有单独重力的行星和恒星,这样其他动态物体就会掉落/被拉向它们
我用主体中的 setInterval(fall,1000) 函数触发的 parseInt(its.style.top) 编写了一个 img 元素,使其“落下”到窗口中。 Moves()函数触发后发生错
我目前正在用 Java 制作 2D 平台游戏。我是初学者,所以放轻松。我对游戏中的重力有疑问。我使用不同的变量来进行坠落和跳跃。我正在使用平铺 map 。那么让我们进入正题吧。我的跌倒方法是这样的 -
我需要获取 LinearLayout 的重力值。我检查了文档,只找到了如何设置它 ( setGravity(value) )。任何人都知道是否有办法获得 LinearLayout 引力? 谢谢 最佳答
我正在使用 C++ 自学 SDL、OpenGL 等。在线教程帮助我创建了一个在屏幕上移动的盒子和一个盒子无法通过的壁架... 我没能找到解释和展示如何让盒子跳跃或四处跳跃的教程。理想情况下,我希望我的
有人知道类似电缆(或基本上任何绳子或绳索)行为的好例子吗? 我目前正在编写一个半模块化合成器。我正在使用 Raphael.js 作为电缆。但它们似乎太僵硬了。我想添加一些物理,所以当我拖动一端而另一端
我有两个问题: 1. 是否可以检索 b2Body 的当前 X 坐标?我知道 API GetPosition 但这还不够具体,我需要专门的 X 坐标。 2. 是否可以在我的 UIAcceleromete
我的布局中有一个 AppCompatCheckBox。这是它的样子: 问题是填充或边距或重力不是我想要的方式。 Box 和左边框之间有一个小间隙。我将 gravity 设置为 left/start p
我的场景: 一个球(动态物理体) 一个立方体作为平台(静态物理体) 默认场景重力 默认质量 当我运行场景时,球正确地落在平台上。但是当我添加运动时(渲染方法中 x 轴上的增量时间运动),球会奇怪地/缓
我有下一个观点: 我希望它看起来像这样: 在第一个中,绿色 ImageButton 的背景位于左上角。在第二个中,绿色 ImageButton 的背景位于中央。(背景图片以绿色方 block 大小为准
我需要能够将 FAB 的 app:layout_anchorGravity="center" 从 center 更改为 bottom|start代码。我找到了这个例子: CoordinatorLayo
我正在用 javascript/html5 编写一个简单的游戏,我正在尝试实现“重力”。 我的代码是这样的: gravity = 4; acceleration = 1.1; function gam
此代码在黑色屏幕上显示图像 assassin1.png,静止不动地位于 (50, 80) 位置。 目标是在该图像上引发 pymunk 引力,使其掉落。我关注了 pymunk tutorial它是使用
我正在尝试为我的 WordPress Gravity 表单 PDF 设置样式,但我似乎无法摆脱两列之间的空白。没有真正的方法来检查 PDF 上的元素,因此更改它的 CSS 并不容易。 我尝试输出实际的
我是一名优秀的程序员,十分优秀!