我想更新一个看起来像这样的对象:
currentObject = {
someValue : "value",
myObject : {
attribute1 : "foo",
attribute2 : "bar"
}
};
Run Code Online (Sandbox Code Playgroud)
..包含一些包含一些变化的对象,即:
updateObject = {
myObject : {
attribute2 : "hello world"
}
};
Run Code Online (Sandbox Code Playgroud)
最后我想更新currentObject,以便:
currentObject.myObject.attribute2 == "hello world"
Run Code Online (Sandbox Code Playgroud)
这也应该适用于其他对象.作为一种解决方案,我考虑迭代对象并以某种方式处理命名空间.但我想知道是否通过使用像jQuery或原型这样的库来解决这个问题.
我使用以下代码在HTML文件中声明我的GLSL ES着色器程序:
<script id="shader-fs" type="x-shader/x-fragment">..shader-code..</script>
Run Code Online (Sandbox Code Playgroud)
正如在学习WebGL示例中看到的那样.一切正常,但我不明白为什么我应该使用脚本标签的type属性.我想知道指定"x-shader/x-fragment"值的位置.是谁... W3C,Khronos集团或浏览器开发商?有谁能够帮我?Tahnk你.
我尝试在我的android项目中修复对谷歌播放服务的依赖.它已经有效,但现在已经坏了.我认为这发生在Android Studio beta版和发布版之间.
这是build.gradle文件中的依赖项:
dependencies {
compile 'com.google.android.gms:play-services:6.5.87'
}
Run Code Online (Sandbox Code Playgroud)
Android Studio能够自动完成版本字符串:'6.5.87'所以我认为它知道如何解决依赖.但它没有..这就是我所畏惧的:
但是如果我尝试执行gradle项目同步,我仍然会收到此错误:
错误:找不到com.google.android.gms:play-services:6.5.87.在以下位置搜索:file:/ C:/Users/MyName/.m2/repository/com/google/android/gms/play-services/6.5.87/play-services-6.5.87.pom file:/ C :/Users/MaName/.m2/repository/com/google/android/gms/play-services/6.5.87/play-services-6.5.87.jar https://repo1.maven.org/maven2/com/ google/android/gms/play-services/6.5.87/play-services-6.5.87.pom https://repo1.maven.org/maven2/com/google/android/gms/play-services/6.5.87 /play-services-6.5.87.jar https://oss.sonatype.org/content/repositories/snapshots/com/google/android/gms/play-services/6.5.87/play-services-6.5.87. pom https://oss.sonatype.org/content/repositories/snapshots/com/google/android/gms/play-services/6.5.87/play-services-6.5.87.jar https://oss.sonatype. org/content/repositories/releases/com/google/android/gms/play-services/6.5.87/play-services-6.5.87.pom https://oss.sonatype.org/content/repositories/releases/com /google/android/gms/play-services/6.5.87/play-services-6.5.87.jar 必需:代码:android:1.0
更新:
Gradle正在"file:/ C:/Users/MyName/.m2/repository/"中搜索,但它应该使用"file:/ C:/ Users/MyName/AppData\Local\Android\sdk\extras\google\m2repository" ..我不知道为什么这是错的,如何解决它..
更新2
我使用此解决方法修复了它:
repositories {
def androidHome = System.getenv("ANDROID_HOME")
maven { url "$androidHome/extras/android/m2repository/" }
maven { url "$androidHome/extras/google/m2repository/"}
}
Run Code Online (Sandbox Code Playgroud)
但我对它并不满意.有人知道我的傻瓜有什么不对吗?
我使用组来存储一些图像并将它们绘制到SpriteBatch.现在我想检测单击了哪个Image.因此,我向Group添加了一个InputListener,以便在触摸时获取事件.传入的InputEvent有一个方法(getTarget),它返回对被点击的Actor的引用.
如果我点击Actor的透明区域,我想忽略传入的事件.如果背后有一个Actor,我想用它代替.我想过这样的事情:
myGroup.addListener(new InputListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
Actor targetActor = event.getTarget();
// is the touched pixel transparent: return false
// else: use targetActor to handle the event and return true
};
});
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?我认为为方法touchDown会继续传播事件而返回false ,让我也在同一位置接收其他Actors的touchDown事件.但这似乎是一种误解......
UPDATE
PT答案解决了获得正确事件的问题.现在我有问题来检测命中像素是否透明.在我看来,我需要Image作为Pixmap来获取访问权限.但我不知道如何将图像转换为Pixmap.我也想知道这在性能和内存使用方面是否是一个很好的解决方案.
我有一缕射线和一架飞机.光线与飞机相交,我想知道在哪里.我如何获得这个交叉点的世界坐标?
(我的具体情况是我将屏幕坐标取消投影到相机并创建光线.飞机是场景的基础)
var vector = new THREE.Vector3( mousePosition.x, mousePosition.y, 1 );
projector.unprojectVector( vector, camera );
var ray = new THREE.Ray(
camera.position,
vector.subSelf( camera.position ).normalize()
);
Run Code Online (Sandbox Code Playgroud) 由于我使用的是版本54而不是版本48,因此我在脚本中得到了这个例外:
Uncaught TypeError: Cannot read property 'map' of undefined three.js:18155
bufferGuessUVType three.js:18155
initMeshBuffers three.js:17963
addObject three.js:21674
initWebGLObjects three.js:21608
render three.js:21145
...
THREE.JSONLoader.createModel three.js:9892
xhr.onreadystatechange
Run Code Online (Sandbox Code Playgroud)
我正在合并几何THREE.GeometryUtils.merge.然后我使用合并的几何来构造网格.对于这个网格我MeshFaceMaterial用来应用面部的材质.因为r54最终会出现异常.如果我使用其他材料,它可以工作......但是我不能使用原始面孔的材料.
更新:所有面都指向材质,geometry.faces[i].materialIndex但几何体不再包含材质数组.
更新:我只是想合并几何并保留他们的材料:)我认为这将是解决方案,但materialIndex面部不会更新合并.我发布这个例子以某种方式解释我需要什么.
mesh1 = new THREE.Mesh(new THREE.PlaneGeometry(2,2), new THREE.MeshBasicMaterial({ color: 0xFF0000}));
mesh2 = new THREE.Mesh(new THREE.PlaneGeometry(2,2), new THREE.MeshBasicMaterial({ color: 0x0000FF}));
mesh2.position.y = 3;
THREE.GeometryUtils.merge(mergedGeo, mesh1);
THREE.GeometryUtils.merge(mergedGeo, mesh2);
scene.add(new THREE.Mesh(mergedGeo, new THREE.MeshFaceMaterial([mesh1.material, mesh2.material])));
Run Code Online (Sandbox Code Playgroud)
我可以实现一个自己的逻辑来将合并的面链接到正确的材料,但这有点令人沮丧,因为它在早期版本中有效.