Wikitude 将值从 java 传递到 JavaScript 以在 AR.RelativeLocation 中使用它
Wikitude Passing value from java to JavaScript to use it in AR.RelativeLocation
我从 java 向 java 脚本传递了一个整数,现在我想使用该值来更改对象的高度。
我给 RelativeLoction 添加了一个 var location = new AR.RelativeLocation(null, 8, 0, a);
问题是它忽略了我传递的值为 10 的值并将 a 视为 0。我知道从这个 var e = document.getElementById('loadingMessage').innerHTML = "Altitude: " + a;
中正确传递的值显示高度:10。
Javascript代码:
var World = {
loaded: false,
rotating: false,
init: function initFn() {
this.createModelAtLocation();
},
createModelAtLocation: function createModelAtLocationFn() {
/*
First a location where the model should be displayed will be defined. This location will be relativ to the user.
*/
var location = new AR.RelativeLocation(null, 8, 0, a);
/*
Next the model object is loaded.
*/
var modelArrow = new AR.Model("assets/arrow.wt3", {
onLoaded: this.worldLoaded,
scale: {
x: 0.005,
y: 0.005,
z: 0.003
},
rotate: {
x: 0.0,
y: 90.0,
z: 0.0
},
translate: {
x: 0,
y: 0,
z: 0
}
});
var indicatorImage = new AR.ImageResource("assets/indi.png");
var indicatorDrawable = new AR.ImageDrawable(indicatorImage, 0.1, {
verticalAnchor: AR.CONST.VERTICAL_ANCHOR.TOP
});
/*
Putting it all together the location and 3D model is added to an AR.GeoObject.
*/
var obj = new AR.GeoObject(location, {
drawables: {
cam: [modelArrow],
indicator: [indicatorDrawable]
}
});
},
worldLoaded: function worldLoadedFn() {
World.loaded = true;
var e = document.getElementById('loadingMessage').innerHTML = "Altitude: " + a;
e.parentElement.removeChild(e);
}
};
var a = 0;
var altitude = 0;
function setAltitude(altitude){
a = altitude;
}
World.init();
在 Alex 的回答后编辑:
现在物体和高度没有显示不确定我是否遗漏了什么
var World = {
location: null,
loaded: false,
rotating: false,
init: function initFn() {
this.createModelAtLocation();
},
createModelAtLocation: function createModelAtLocationFn() {
/*
First a location where the model should be displayed will be defined. This location will be relativ to the user.
*/
//var location = new AR.RelativeLocation(null, 8, 0, a);
World.location = new AR.RelativeLocation(null, 8, 0, a);
/*
Next the model object is loaded.
*/
var modelArrow = new AR.Model("assets/arrow.wt3", {
onLoaded: this.worldLoaded,
scale: {
x: 0.005,
y: 0.005,
z: 0.003
},
rotate: {
x: 0.0,
y: 90.0,
z: 0.0
},
translate: {
x: 0,
y: 0,
z: 0
}
});
var indicatorImage = new AR.ImageResource("assets/indi.png");
var indicatorDrawable = new AR.ImageDrawable(indicatorImage, 0.1, {
verticalAnchor: AR.CONST.VERTICAL_ANCHOR.TOP
});
/*
Putting it all together the location and 3D model is added to an AR.GeoObject.
*/
var obj = new AR.GeoObject(location, {
drawables: {
cam: [modelArrow],
indicator: [indicatorDrawable]
}
});
},
worldLoaded: function worldLoadedFn() {
World.loaded = true;
var e = document.getElementById('loadingMessage').innerHTML = "Altitude: " + a;
e.parentElement.removeChild(e);
}
};
var a = 0;
var altitude = 0;
function setAltitude(altitude){
//a = altitude;
//World.location.altitudeDelta = altitude;
World.location.a = altitude;
}
World.init();
请记住 Model.onLoaded 是异步的。我的假设是事情发生的顺序是:init() -> createModelAtLocation() -> java sets altitude -> worldLoaded()。
您可以采取以下措施来避免这种情况:
var World = {
location: null,
...
World.location = new AR.RelativeLocation(null, 8, 0, a);
...
};
function setAltitude(altitude){
World.location.altitudeDelta = altitude;
}
我设法解决了这个问题,如果有人感兴趣的话,这里就是答案
var World = {
//location: null,
loaded: false,
rotating: false,
loadValuesFromJava: function loadValuesFromJavaFn(Altitude){
a = Altitude;
this.createModelAtLocation();
},
/*init: function initFn() {
this.createModelAtLocation();
},*/
createModelAtLocation: function createModelAtLocationFn() {
/*
First a location where the model should be displayed will be defined. This location will be relativ to the user.
*/
var location = new AR.RelativeLocation(null, 8, 0, a);
//World.location = new AR.RelativeLocation(null, 8, 0, a);
/*
Next the model object is loaded.
*/
var modelArrow = new AR.Model("assets/arrow.wt3", {
onLoaded: this.worldLoaded,
scale: {
x: 0.005,
y: 0.005,
z: 0.003
},
rotate: {
x: 0.0,
y: 90.0,
z: 0.0
},
translate: {
x: 0,
y: 0,
z: 0
}
});
var indicatorImage = new AR.ImageResource("assets/indi.png");
var indicatorDrawable = new AR.ImageDrawable(indicatorImage, 0.1, {
verticalAnchor: AR.CONST.VERTICAL_ANCHOR.TOP
});
/*
Putting it all together the location and 3D model is added to an AR.GeoObject.
*/
var obj = new AR.GeoObject(location, {
drawables: {
cam: [modelArrow],
indicator: [indicatorDrawable]
}
});
},
worldLoaded: function worldLoadedFn() {
World.loaded = true;
var e = document.getElementById('loadingMessage').innerHTML = "Altitude: " + a;
e.parentElement.removeChild(e);
}
};
var a = 0;
var Altitude = 0;
/*var a = 0;
var altitude = 0;
function setAltitude(altitude){
a = altitude;
//World.location.altitudeDelta = altitude;
//World.location.altitudeDelta = altitude;
}*/
//World.init();
//World.loadValuesFromJava();
我从 java 向 java 脚本传递了一个整数,现在我想使用该值来更改对象的高度。
我给 RelativeLoction 添加了一个 var location = new AR.RelativeLocation(null, 8, 0, a);
问题是它忽略了我传递的值为 10 的值并将 a 视为 0。我知道从这个 var e = document.getElementById('loadingMessage').innerHTML = "Altitude: " + a;
中正确传递的值显示高度:10。
Javascript代码:
var World = {
loaded: false,
rotating: false,
init: function initFn() {
this.createModelAtLocation();
},
createModelAtLocation: function createModelAtLocationFn() {
/*
First a location where the model should be displayed will be defined. This location will be relativ to the user.
*/
var location = new AR.RelativeLocation(null, 8, 0, a);
/*
Next the model object is loaded.
*/
var modelArrow = new AR.Model("assets/arrow.wt3", {
onLoaded: this.worldLoaded,
scale: {
x: 0.005,
y: 0.005,
z: 0.003
},
rotate: {
x: 0.0,
y: 90.0,
z: 0.0
},
translate: {
x: 0,
y: 0,
z: 0
}
});
var indicatorImage = new AR.ImageResource("assets/indi.png");
var indicatorDrawable = new AR.ImageDrawable(indicatorImage, 0.1, {
verticalAnchor: AR.CONST.VERTICAL_ANCHOR.TOP
});
/*
Putting it all together the location and 3D model is added to an AR.GeoObject.
*/
var obj = new AR.GeoObject(location, {
drawables: {
cam: [modelArrow],
indicator: [indicatorDrawable]
}
});
},
worldLoaded: function worldLoadedFn() {
World.loaded = true;
var e = document.getElementById('loadingMessage').innerHTML = "Altitude: " + a;
e.parentElement.removeChild(e);
}
};
var a = 0;
var altitude = 0;
function setAltitude(altitude){
a = altitude;
}
World.init();
在 Alex 的回答后编辑:
现在物体和高度没有显示不确定我是否遗漏了什么
var World = {
location: null,
loaded: false,
rotating: false,
init: function initFn() {
this.createModelAtLocation();
},
createModelAtLocation: function createModelAtLocationFn() {
/*
First a location where the model should be displayed will be defined. This location will be relativ to the user.
*/
//var location = new AR.RelativeLocation(null, 8, 0, a);
World.location = new AR.RelativeLocation(null, 8, 0, a);
/*
Next the model object is loaded.
*/
var modelArrow = new AR.Model("assets/arrow.wt3", {
onLoaded: this.worldLoaded,
scale: {
x: 0.005,
y: 0.005,
z: 0.003
},
rotate: {
x: 0.0,
y: 90.0,
z: 0.0
},
translate: {
x: 0,
y: 0,
z: 0
}
});
var indicatorImage = new AR.ImageResource("assets/indi.png");
var indicatorDrawable = new AR.ImageDrawable(indicatorImage, 0.1, {
verticalAnchor: AR.CONST.VERTICAL_ANCHOR.TOP
});
/*
Putting it all together the location and 3D model is added to an AR.GeoObject.
*/
var obj = new AR.GeoObject(location, {
drawables: {
cam: [modelArrow],
indicator: [indicatorDrawable]
}
});
},
worldLoaded: function worldLoadedFn() {
World.loaded = true;
var e = document.getElementById('loadingMessage').innerHTML = "Altitude: " + a;
e.parentElement.removeChild(e);
}
};
var a = 0;
var altitude = 0;
function setAltitude(altitude){
//a = altitude;
//World.location.altitudeDelta = altitude;
World.location.a = altitude;
}
World.init();
请记住 Model.onLoaded 是异步的。我的假设是事情发生的顺序是:init() -> createModelAtLocation() -> java sets altitude -> worldLoaded()。
您可以采取以下措施来避免这种情况:
var World = {
location: null,
...
World.location = new AR.RelativeLocation(null, 8, 0, a);
...
};
function setAltitude(altitude){
World.location.altitudeDelta = altitude;
}
我设法解决了这个问题,如果有人感兴趣的话,这里就是答案
var World = {
//location: null,
loaded: false,
rotating: false,
loadValuesFromJava: function loadValuesFromJavaFn(Altitude){
a = Altitude;
this.createModelAtLocation();
},
/*init: function initFn() {
this.createModelAtLocation();
},*/
createModelAtLocation: function createModelAtLocationFn() {
/*
First a location where the model should be displayed will be defined. This location will be relativ to the user.
*/
var location = new AR.RelativeLocation(null, 8, 0, a);
//World.location = new AR.RelativeLocation(null, 8, 0, a);
/*
Next the model object is loaded.
*/
var modelArrow = new AR.Model("assets/arrow.wt3", {
onLoaded: this.worldLoaded,
scale: {
x: 0.005,
y: 0.005,
z: 0.003
},
rotate: {
x: 0.0,
y: 90.0,
z: 0.0
},
translate: {
x: 0,
y: 0,
z: 0
}
});
var indicatorImage = new AR.ImageResource("assets/indi.png");
var indicatorDrawable = new AR.ImageDrawable(indicatorImage, 0.1, {
verticalAnchor: AR.CONST.VERTICAL_ANCHOR.TOP
});
/*
Putting it all together the location and 3D model is added to an AR.GeoObject.
*/
var obj = new AR.GeoObject(location, {
drawables: {
cam: [modelArrow],
indicator: [indicatorDrawable]
}
});
},
worldLoaded: function worldLoadedFn() {
World.loaded = true;
var e = document.getElementById('loadingMessage').innerHTML = "Altitude: " + a;
e.parentElement.removeChild(e);
}
};
var a = 0;
var Altitude = 0;
/*var a = 0;
var altitude = 0;
function setAltitude(altitude){
a = altitude;
//World.location.altitudeDelta = altitude;
//World.location.altitudeDelta = altitude;
}*/
//World.init();
//World.loadValuesFromJava();