- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 A 框架中制作一个组件,该组件将使播放器/相机朝相机所面对的方向移动。它不应该在 y 平面上的任何位置移动,只能在 x/y 平面上移动。 dom 中的当前设置是:
<a-entity>
<a-camera></a-camera>
</a-entity>
最佳答案
您可以通过多种方式处理此问题。
0) 向量
在大多数 3D 引擎中简单且可用:
<script src="https://aframe.io/releases/1.2.0/aframe.min.js"></script>
<script>
// define a custom component
AFRAME.registerComponent("foo", {
init: function() {
// grab the camera
var player = document.querySelector("a-camera")
// create a direction vector
var direction = new THREE.Vector3();
window.addEventListener("keydown", (e) => {
if (e.code === "KeyR") {
// get the cameras world direction
this.el.sceneEl.camera.getWorldDirection(direction);
// multiply the direction by a "speed" factor
direction.multiplyScalar(0.1)
// get the current position
var pos = player.getAttribute("position")
// add the direction vector
pos.add(direction)
// set the new position
player.setAttribute("position", pos);
// !!! NOTE - it would be more efficient to do the
// position change on the players THREE.Object:
// `player.object3D.position.add(direction)`
// but it would break "getAttribute("position")
}
})
}
})
</script>
<a-scene>
<a-box position="-1 0.5 -3" rotation="0 45 0" foo color="#4CC3D9"></a-box>
<a-sphere position="0 1.25 -5" radius="1.25" color="#EF2D5E"></a-sphere>
<a-cylinder position="1 0.75 -3" radius="0.5" height="1.5" color="#FFC65D"></a-cylinder>
<a-plane position="0 0 -4" rotation="-90 0 0" width="4" height="4" color="#7BC8A4"></a-plane>
<a-sky color="#ECECEC"></a-sky>
<a-camera></a-camera>
</a-scene>
var angle = player.getAttribute("rotation") // grab angle
var x = 1 * Math.cos(angle.y * Math.PI / 180) // calculate shifts
var y = 1 * Math.sin(angle.y * Math.PI / 180)
var pos = player.getAttribute("position") // grab position
pos.x -= y; // update position
pos.z -= x;
player.setAttribute("position", pos);
这很简单——获取 Angular ,计算位移,然后设置新位置。
<script src="https://aframe.io/releases/1.2.0/aframe.min.js"></script>
<script>
AFRAME.registerComponent("foo", {
init: function() {
var player = document.querySelector("a-camera")
window.addEventListener("keydown", (e) => {
if (e.code === "KeyR") {
var angle = player.getAttribute("rotation")
var x = 0.1 * Math.cos(angle.y * Math.PI / 180)
var y = 0.1 * Math.sin(angle.y * Math.PI / 180)
var pos = player.getAttribute("position")
pos.x -= y;
pos.z -= x;
player.setAttribute("position", pos);
}
})
}
})
</script>
<a-scene>
<a-box position="-1 0.5 -3" rotation="0 45 0" foo color="#4CC3D9"></a-box>
<a-sphere position="0 1.25 -5" radius="1.25" color="#EF2D5E"></a-sphere>
<a-cylinder position="1 0.75 -3" radius="0.5" height="1.5" color="#FFC65D"></a-cylinder>
<a-plane position="0 0 -4" rotation="-90 0 0" width="4" height="4" color="#7BC8A4"></a-plane>
<a-sky color="#ECECEC"></a-sky>
<a-camera></a-camera>
</a-scene>
<script src="https://aframe.io/releases/1.2.0/aframe.min.js"></script>
<script>
// same component as 2D - just different calculations
AFRAME.registerComponent("foo", {
init: function() {
var player = document.querySelector("a-camera")
window.addEventListener("keydown", (e) => {
if (e.code === "KeyR") {
// get the player rotation
var angle = player.getAttribute("rotation")
// calculate the angles
// the camera's theta == 0 is actually 90' in the clipspace
let theta = (angle.x * Math.PI / 180) + Math.PI / 2
let fi = angle.y * Math.PI / 180
let r = 0.1
// calculate the position shifts
let z = Math.sin(theta) * Math.cos(fi) * r
let x = Math.sin(theta) * Math.sin(fi) * r
let y = Math.cos(theta) * r
// update the position
var pos = player.getAttribute("position")
pos.x -= x;
pos.y -= y;
pos.z -= z;
player.setAttribute("position", pos);
}
})
}
})
</script>
<a-scene>
<a-box position="-1 0.5 -3" rotation="0 45 0" foo color="#4CC3D9"></a-box>
<a-sphere position="0 1.25 -5" radius="1.25" color="#EF2D5E"></a-sphere>
<a-cylinder position="1 0.75 -3" radius="0.5" height="1.5" color="#FFC65D"></a-cylinder>
<a-plane position="0 0 -4" rotation="-90 0 0" width="4" height="4" color="#7BC8A4"></a-plane>
<a-sky color="#ECECEC"></a-sky>
<a-camera></a-camera>
</a-scene>
关于javascript - A 帧沿相机方向向前移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48726018/
我正在使用以下键存储哈希集:measurement: , f.e. measurement:1482236501103 ,然后在稍后我想传递某个时间戳并获取从给定时间戳到结束的所有记录。但由于 Red
有 Home.vue 和 Statistics.vue 页面。 Home.vue 渲染 TableFields.vue 组件。在 Home.vue 中,有一些字段编号,在页面加载时设置了初始值“3”。
Spring MVC ModelAndView forward 不工作。下面的代码没有将请求转发到 Name.jsp。非常感谢您的帮助。 package main.java.com.mkyong.co
我有一个这样的值列表, lst = [1, 2, 3, 4, 5, 6, 7, 8] 期望输出 : window size = 3 1 # first element in the list
我正在尝试将硬币类移动到按下键时的适当元素。但是,如果元素的名称相似,我不确定如何正确导航 DOM 树。另外,我根据按下键(e.which)向上/向下移动,但如果硬币在某些地方,我需要旋转回到顶部或底
我需要制作一个不循环的幻灯片,但实际上在幻灯片之间弹跳:例如,如果我有 3 张幻灯片,我希望幻灯片顺序为: 1 -> 2 -> 3 -> 2 -> 1 -> 2 ... 我想出了这个解决方案(使用 j
我只想获取下一次迭代中的元素(使用基于范围的 for 循环) 我试过类似的东西: *(&x+1) 应该表示“i+1”,如果“i”在这里是一个迭代器的话 bool factorChain(std::ve
我有一个 slider ,其可能值在 0 到 1 之间,步长为 0.1 例如,如果我在起点移动 slider ,动画将从 (0%) 开始,如果我将 slider 移动到 0.5 ( 50%) 表示将从
这个问题在这里已经有了答案: python time subtraction (1 个回答) 关闭 9 年前。 我想实现的很简单: time.time() 不太可读。如何获得: 例如 time.ti
如何在 html 中显示此 ► 播放(向前)或向右实心箭头符号? 最佳答案 是的,►,但它在所有浏览器中看起来可能不一样。 关于html - 如何在 html 中显示 ► 播放(向前)或向右实心箭头符
我正在开发 wpf c# 应用程序,我需要检测用户何时按下“/ ” 但我找不到“/ ” e.Key,我看到有Key.OemBackslash和类似的东西,但我找不到“/”(正斜杠)的正确事件.....
我有两个数据集,(dt1) 一个带有“开始”日期,每个 ID 最多两个条目(因为这些是 L 或 R 眼手术的条目)和一个 (dt2) 第二个数据库,其中包含多个日期之前和之后开始日期。这些不仅限于眼科
我有使用 3 个欧拉 Angular (aRotX、aRotY、aRotZ)在其位置(aX、aY、aZ)显示模型的代码: var m = mat4.create(); mat4.identity(m)
我需要从方向 vector (vForward) 获取旋转矩阵 我还有 vRight 和 vUp vector 。所有这些 vector 都是单位 vector 。 我只需要得到旋转矩阵。 要获得仅在
我是一名优秀的程序员,十分优秀!