请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

this.position.add is not a function

bottle.js/下的_jump方法/的这行代码this.obj.translateY(translateY)报错了
代码段为:

_jump (tickTime) {
const t =tickTime / 1000
this.flyingTime = this.flyingTime + t
const translateH = this.velocity.vx * t
const translateY = this.velocity.vy * t - 0.5 * gamekConf.gravity * t * t - gamekConf.gravity * this.flyingTime * t

this.obj.translateY(translateY)
this.obj.translateOnAxis(this.axis, translateH)

}
报错信息为:

this.position.add is not a function
TypeError: this.position.add is not a function
at Object3D.translateOnAxis (http://127.0.0.1:64645/game/libs/three.js:8371:19)
at Object3D.translateY (http://127.0.0.1:64645/game/libs/three.js:8397:17)
at Bottle._jump (http://127.0.0.1:64645/game/src/objects/bottle.js:195:22)
at Bottle.update (http://127.0.0.1:64645/game/src/objects/bottle.js:145:22)
at GamePage.render (http://127.0.0.1:64645/game/src/pages/game-page.js:105:29)

正在回答 回答被采纳积分+3

2回答

慕盖茨2021568 2019-04-01 14:50:35

在不 老哥 请问你解决了吗

0 回复 有任何疑惑可以回复我~
千迦 2018-12-14 12:12:01

这个错是从threejs的源码中报出来的,这种源码里的报错,大概率还是调用的时候某些值给的不对,一个方法就是打断点之后,查一下这个函数调用的时候,this.obj的情况,还有this.axis以及translateH,如果还是看不出来可以考虑debug一下threejs的源码了,我看了一下源码,直接看没看出什么错误,this.position是个vector3,正常是有add方法的,不太好查的话,确实得debug一下源码,你可以看看,有什么问题再发出来

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉1405101 #1
    之前有一个警告:(VM3086:formatted:271)THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.不知道和这个问题有没有关系.
    (我试了下在requestAnimationFrame(this.render.bind(this))之外调用this.obj.translateY(translateY)是不报错的)
    debug后执行add()方法时出来个这个(VM3086:formatted和上面的一样...)
    部分内容为:
    window.onerror = function(e, t, n, o, r) {
                    try {
                        return window.__global.WeixinJSBridge.__triggerOnEvent("onError", r),
                        !0
                    } catch (e) {}
                }
                ;
                var e = document.createElement("canvas")
                  , t = document.createElement("canvas")
                  , n = e.getContext("2d")
                  , o = t.getContext("webgl");
    回复 有任何疑惑可以回复我~ 2018-12-14 16:48:24
  • 提问者 慕粉1405101 #2
    const c = (e,t)=>{
                    for (let n in Object.setPrototypeOf(e, t),
                    t)
                        try {
                            e[n] = t[n]
                        } catch (e) {}
                }
                ;
                try {
                    c(window.__global.canvasProto, Object.getPrototypeOf(e))
                } catch (e) {}
                try {
                    c(window.__global.canvasWebGlContextProto,
    回复 有任何疑惑可以回复我~ 2018-12-14 16:51:11
  • 提问者 慕粉1405101 #3
    Object.getPrototypeOf(o))
                } catch (e) {}
                try {
                    c(window.__global.canvas2dContextProto, Object.getPrototypeOf(n))
                } catch (e) {}
                for (var r in window.__global.document = {},
                window.document)
                    try {
                        window.__global.document[r] = "function" == typeof window.document[r] ? window.document[r].bind(document) : window.document[r]
                    } catch (e) {}
                const l = console.error.bind(console)
                  , s = console.warn.bind(console);
                console.error = function(...e) {
                    try {
                        if (1 >= e.length)
                            return l(...e);
                        for (const t of e)
                            if ("object" == typeof t)
                                return l(...e);
                        return l(e.join(" "))
    回复 有任何疑惑可以回复我~ 2018-12-14 16:52:23
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信