- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了快速变化的大型场景图的问题。
在响应事件时,当我清除场景图 (getChildren().clear
) 时,有时会出现此异常:
Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: class javafx.scene.Scene cannot be cast to class javafx.scene.Node (javafx.scene.Scene and javafx.scene.Node are in module javafx.graphics of loader 'app')
at javafx.graphics/javafx.scene.Scene$MouseHandler.handleNodeRemoval(Scene.java:3709)
at javafx.graphics/javafx.scene.Scene.generateMouseExited(Scene.java:3581)
at javafx.graphics/javafx.scene.Parent$3.onProposedChange(Parent.java:593)
at javafx.base/com.sun.javafx.collections.VetoableListDecorator.clear(VetoableListDecorator.java:294)
at bit.fxzoomer/bit.fxzoomer.SectorPane12.populateMap(SectorPane12.java:72)
at bit.fxzoomer/bit.fxzoomer.SectorPane12.lambda$addListeners$1(SectorPane12.java:247)
at javafx.base/com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:181)
at javafx.base/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
at javafx.base/javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:106)
at javafx.base/javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:113)
at javafx.base/javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)
at javafx.base/javafx.beans.property.ObjectProperty.setValue(ObjectProperty.java:72)
at bit.fxzoomer/bit.fxzoomer.SectorPane12.setViewport(SectorPane12.java:62)
at bit.fxzoomer/bit.fxzoomer.App.lambda$start$0(App.java:31)
at javafx.base/com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:181)
at javafx.base/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
at javafx.base/javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:106)
at javafx.base/javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:113)
at javafx.base/javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)
at javafx.base/javafx.beans.property.ObjectProperty.setValue(ObjectProperty.java:72)
at bit.fxzoomer/bit.fxzoomer.PanZoomPane.setViewport(PanZoomPane.java:99)
at bit.fxzoomer/bit.fxzoomer.PanZoomPane.lambda$new$3(PanZoomPane.java:82)
at javafx.base/com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:181)
at javafx.base/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
at javafx.base/javafx.beans.binding.ObjectBinding.invalidate(ObjectBinding.java:170)
at javafx.base/com.sun.javafx.binding.BindingHelperObserver.invalidated(BindingHelperObserver.java:52)
at javafx.base/com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:136)
at javafx.base/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
at javafx.graphics/javafx.scene.Node$LazyBoundsProperty.invalidate(Node.java:9785)
at javafx.graphics/javafx.scene.Node$MiscProperties.invalidateBoundsInLocal(Node.java:6876)
at javafx.graphics/javafx.scene.Node.invalidateBoundsInLocal(Node.java:3469)
at javafx.graphics/javafx.scene.Node.localBoundsChanged(Node.java:4041)
at javafx.graphics/javafx.scene.Node.doGeomChanged(Node.java:4028)
at javafx.graphics/javafx.scene.Node$1.doGeomChanged(Node.java:461)
at javafx.graphics/com.sun.javafx.scene.NodeHelper.geomChangedImpl(NodeHelper.java:184)
at javafx.graphics/com.sun.javafx.scene.NodeHelper.geomChanged(NodeHelper.java:137)
at javafx.graphics/javafx.scene.Parent.childBoundsChanged(Parent.java:1872)
at javafx.graphics/javafx.scene.Node.notifyParentOfBoundsChange(Node.java:4099)
at javafx.graphics/javafx.scene.Node.transformedBoundsChanged(Node.java:4060)
at javafx.graphics/javafx.scene.Node.doTransformsChanged(Node.java:5003)
at javafx.graphics/javafx.scene.Node$1.doTransformsChanged(Node.java:444)
at javafx.graphics/com.sun.javafx.scene.NodeHelper.transformsChangedImpl(NodeHelper.java:170)
at javafx.graphics/com.sun.javafx.scene.NodeHelper.transformsChanged(NodeHelper.java:119)
at javafx.graphics/javafx.scene.transform.Transform.transformChanged(Transform.java:2109)
at javafx.graphics/javafx.scene.transform.Affine$AffineAtomicChange.end(Affine.java:5778)
at javafx.graphics/javafx.scene.transform.Affine.appendTranslation(Affine.java:2038)
at javafx.graphics/javafx.scene.transform.Translate.appendTo(Translate.java:539)
at javafx.graphics/javafx.scene.transform.Affine.append(Affine.java:1502)
at bit.fxzoomer/bit.fxzoomer.PanZoomPane.translate(PanZoomPane.java:123)
at bit.fxzoomer/bit.fxzoomer.PanZoomPane.lambda$new$1(PanZoomPane.java:58)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3862)
at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1849)
at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2590)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
at javafx.graphics/com.sun.glass.ui.mac.MacView.notifyMouse(MacView.java:127)
它从那个异常开始,然后我得到这些的级联:
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException: Cannot invoke "javafx.scene.Scene.isDepthBuffer()" because the return value of "javafx.scene.Node.getScene()" is null
at javafx.graphics/com.sun.javafx.scene.input.PickResultChooser.processOffer(PickResultChooser.java:185)
at javafx.graphics/com.sun.javafx.scene.input.PickResultChooser.offer(PickResultChooser.java:143)
at javafx.graphics/javafx.scene.Node.doComputeIntersects(Node.java:5263)
at javafx.graphics/javafx.scene.Node$1.doComputeIntersects(Node.java:456)
at javafx.graphics/com.sun.javafx.scene.NodeHelper.computeIntersectsImpl(NodeHelper.java:180)
at javafx.graphics/com.sun.javafx.scene.NodeHelper.computeIntersects(NodeHelper.java:133)
at javafx.graphics/javafx.scene.Node.intersects(Node.java:5234)
at javafx.graphics/javafx.scene.Node.doPickNodeLocal(Node.java:5171)
at javafx.graphics/javafx.scene.Node$1.doPickNodeLocal(Node.java:450)
at javafx.graphics/com.sun.javafx.scene.NodeHelper.pickNodeLocalImpl(NodeHelper.java:175)
at javafx.graphics/com.sun.javafx.scene.NodeHelper.pickNodeLocal(NodeHelper.java:128)
at javafx.graphics/javafx.scene.Node.pickNode(Node.java:5203)
at javafx.graphics/javafx.scene.Parent.pickChildrenNode(Parent.java:805)
at javafx.graphics/javafx.scene.Parent$1.pickChildrenNode(Parent.java:136)
at javafx.graphics/com.sun.javafx.scene.ParentHelper.pickChildrenNode(ParentHelper.java:113)
at javafx.graphics/javafx.scene.layout.Region.doPickNodeLocal(Region.java:3160)
at javafx.graphics/javafx.scene.layout.Region$1.doPickNodeLocal(Region.java:184)
at javafx.graphics/com.sun.javafx.scene.layout.RegionHelper.pickNodeLocalImpl(RegionHelper.java:104)
at javafx.graphics/com.sun.javafx.scene.NodeHelper.pickNodeLocal(NodeHelper.java:128)
at javafx.graphics/javafx.scene.Node.pickNode(Node.java:5203)
at javafx.graphics/javafx.scene.Parent.pickChildrenNode(Parent.java:805)
at javafx.graphics/javafx.scene.Parent$1.pickChildrenNode(Parent.java:136)
at javafx.graphics/com.sun.javafx.scene.ParentHelper.pickChildrenNode(ParentHelper.java:113)
at javafx.graphics/javafx.scene.layout.Region.doPickNodeLocal(Region.java:3160)
at javafx.graphics/javafx.scene.layout.Region$1.doPickNodeLocal(Region.java:184)
at javafx.graphics/com.sun.javafx.scene.layout.RegionHelper.pickNodeLocalImpl(RegionHelper.java:104)
at javafx.graphics/com.sun.javafx.scene.NodeHelper.pickNodeLocal(NodeHelper.java:128)
at javafx.graphics/javafx.scene.Node.pickNode(Node.java:5203)
at javafx.graphics/javafx.scene.Scene$MouseHandler.pickNode(Scene.java:4005)
at javafx.graphics/javafx.scene.Scene.pick(Scene.java:2029)
at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3815)
at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1849)
at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2590)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
at javafx.graphics/com.sun.glass.ui.mac.MacView.notifyMouse(MacView.java:127)
具体来说,我正在平移场景图(请在此处查看答案 Get Viewport of translated and scaled node )。每次视口(viewport)改变时,我都会重做场景图。
场景图相当大,有 20-30,000 个节点。
当事情很忙时,当我快速拖动场景,点击很多,不经常,我会得到这些异常。
这是单线程的,所以我认为我没有看到同步问题,但也许我正在与重新显示线程作斗争。显然有些事情在错误的时间发生。
有时它会从这些错误中恢复(它会发出很多无关紧要的噪音),有时它似乎破坏了场景并且不再起作用。
我曾尝试通过计时器延迟更新,该计时器在拖动时不断刷新,仅在拖动停止后触发(通过 Platform.runLater
),但即使这样也可能触发此异常。我将其全部放回主线程以排除同步问题。
这是非常零星的。我不知道什么在打什么。
是什么原因造成的,我该如何预防?
编辑:这是一个失败的独立示例。它甚至没有大的场景图。只需运行该程序,捕获左下角并来回调整大小,它就会失败。
使用 JDK 11 和 JFX 17.0.2 测试。
我尝试了一个大型场景图(25,000 个元素),简单地绑定(bind)到一个调整大小事件,并且无法让它失败。这很容易失败。
package bit.fxtest2;
import javafx.application.Application;
import javafx.beans.binding.Binding;
import javafx.beans.binding.ObjectBinding;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.ObservableList;
import javafx.geometry.Bounds;
import javafx.geometry.Insets;
import javafx.geometry.Point2D;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.Region;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Affine;
import javafx.scene.transform.Transform;
import javafx.stage.Stage;
public class TransformTest9 extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
BigGridPane gridPane = new BigGridPane();
PanZoomPane pzPane = new PanZoomPane(gridPane);
pzPane.getViewportProperty().addListener((ov, t, t1) -> {
gridPane.setViewPort(t1);
});
Scene scene = new Scene(pzPane, 250, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
class BigGridPane extends Region {
ObjectProperty<Bounds> viewPortProperty = new SimpleObjectProperty<>();
public BigGridPane() {
viewPortProperty.addListener((ov, t, t1) -> {
populate();
});
}
public void setViewPort(Bounds viewPort) {
viewPortProperty.setValue(viewPort);
}
public void populate() {
ObservableList<Node> children = getChildren();
children.clear();
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
Rectangle r = new Rectangle(i * 20, j * 20, 20, 20);
r.setFill(Color.WHITE);
r.setStroke(Color.BLACK);
children.add(r);
}
}
System.out.println(children.size());
}
}
class PanZoomPane extends Region {
private final Node content;
private final Rectangle clip;
private Affine transform;
private Point2D mouseDown;
private static final double SCALE = 1.01; // zoom factor per pixel scrolled
Binding<Bounds> viewportBinding;
ObjectProperty<Bounds> viewportProperty = new SimpleObjectProperty<>();
public PanZoomPane(Node content) {
Background background = new Background(new BackgroundFill(Color.WHITE, CornerRadii.EMPTY, Insets.EMPTY));
setBackground(background);
this.content = content;
getChildren().add(content);
clip = new Rectangle();
setClip(clip);
transform = Affine.affine(1, 0, 0, 1, 0, 0);
content.getTransforms().setAll(transform);
content.setOnMousePressed(event -> mouseDown = new Point2D(event.getX(), event.getY()));
content.setOnMouseDragged(event -> {
double deltaX = event.getX() - mouseDown.getX();
double deltaY = event.getY() - mouseDown.getY();
translate(deltaX, deltaY);
});
content.setOnScroll(event -> {
double pivotX = event.getX();
double pivotY = event.getY();
double scale = Math.pow(SCALE, event.getDeltaY());
scale(pivotX, pivotY, scale);
});
viewportBinding = new ObjectBinding<>() {
{
bind(
localToSceneTransformProperty(),
boundsInLocalProperty(),
content.localToSceneTransformProperty()
);
}
@Override
protected Bounds computeValue() {
return content.sceneToLocal(localToScene(getBoundsInLocal()));
}
};
viewportBinding.addListener((obs, oldViewport, newViewport) -> setViewport(newViewport));
}
public ObjectProperty<Bounds> getViewportProperty() {
return viewportProperty;
}
public void setViewportProperty(ObjectProperty<Bounds> viewportProperty) {
this.viewportProperty = viewportProperty;
}
public Bounds getViewport() {
return viewportProperty.getValue();
}
public void setViewport(Bounds bounds) {
viewportProperty.setValue(bounds);
}
public Node getContent() {
return content;
}
@Override
protected void layoutChildren() {
clip.setWidth(getWidth());
clip.setHeight(getHeight());
}
public void scale(double pivotX, double pivotY, double scale) {
Affine t = transform.clone();
t.append(Transform.scale(scale, scale, pivotX, pivotY));
}
public void translate(double x, double y) {
transform.append(Transform.translate(x, y));
}
}
}
编辑:
我想我有一个解决方案。我已经在下面发布了。
最佳答案
我想这就是答案。
编辑:不,不是。仍然有问题。也许我每次都会销毁并重新创建 Pane - 似乎过分了。
@kleopatra 提到了在 `PanZoomPane 中调用 super.layoutChildren
。虽然这适用于测试,但不适用于我的代码。
@jewelsea 向我指出了这个 post它有一个重要的假设:
On the third hand, we expect people to set up scene graphs atinitialization time and modify nodes in-place, instead of doing scenegraph surgery.
这显然不是我在做什么。我不仅在进行场景图形手术,而且可以说是彻底的屠宰。
我之前从@James_D 那里看到过关于如何在 layoutChildren
中而不是事件处理程序中更好地完成某些工作的提及。所以也许 layoutChildren
是我们应该寻找的地方。
当 PanZoomPane.layoutChildren
被调用时,它不可避免地会调用我的自定义 Pane 的 layoutChildren
。
当 PanZoomPane
调整大小时,调用 layoutChildren
。但是当它被平移或缩放时,它不会。为了解决这个问题,在 scale
和 translate
方法中,我调整了 Pane 的高度:
double height = getHeight();
setHeight(height + 1);
setHeight(height);
这足以触发 layoutChildren
调用。显然 layoutChildren
是可以接受场景图手术的地方。因此,我将所有场景图代码移至 layoutChildren
。
可以说我应该将 tickle 移到我的内容 Pane 中,而不是从 PanZoomPane 强制它。
但它的核心是我猜场景图手术在事件处理程序中是不受欢迎的。我们应该只使用现有场景图的属性。
我不知道是否有更好的解决方案,但就目前而言,它似乎有效并且似乎有点道理。
关于javafx - 在 JavaFX 中重置场景图时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70920125/
websocket的用途/场景 先总结:高即时性服务,比如聊天室的群聊,server顺序收到了张三,李四的消息,立即就推送给王五,不能让王五等半天。 Ajax也可以一秒一刷,让王五去问张三说话没,如果
前端的工作过程里,本地开发、提供测试环境,总得有个用着顺手的服务器软件,这个场景里nginx很流行。 介绍两个好用的配置项:rewrite try_files @xxxx rewrite 比较
我有一个场景的两个不同角度的 2 个视频文件,我想重建场景的 3D 估计。它类似于 3D 传感器的作用(例如 Kinect、PrimeSense)。我正在寻找一个库,甚至是一个完善的机器视觉算法,以便
我已阅读RebaseProject页面并尝试了一个不平凡的例子(不是对一个完整的分支进行 rebase )。这与 rebase D 的情况类似我场景B。 这是rebase之前的情况: default
有没有办法将我的场景保存在 JavaFx 应用程序中单独的 Java 文件中?我尝试过这样的事情: public class MyApp extends Application { pri
我有这样的场景:用户想要查看大量有关自己的信息。例如:年龄、姓名、地位、收入、工作、爱好、 child 的名字、妻子的名字、酋长的名字、祖父/祖母的名字。大约 50 个变量。他可以选择任何变量来显示信
我希望有人能帮助我解决这个问题:我有一个包含条目的表。我想执行查询并根据模式获取得分最高的记录。模式将是:如果我的话按原样出现,那么该条目的分数将是最高的。如果该单词出现在句子中,则该条目的分数将低于
我正在尝试在我的应用程序委托(delegate)方法中实现一些逻辑。了解当前正在运行哪种场景将非常有帮助。 [[CCDirector sharedDirector] runningScene] 返回当
好的,这是一个有趣的。我有 2 个表:tbl_notes、tbl_notes_categories 简单地说,tbl_notes 有一个 categoryid,我将 2 个表与该 ID 相关联。所以,
我有一个使用并行运行的 Specflow、selenium、NUnit 的测试解决方案在 AssemblyInfo 中添加了这个:[程序集:Parallelizable(ParallelScope.F
我正在尝试弄清楚如何在 SpriteKit 中添加更多场景。如果我在 GameViewController 中使用 SpriteKit 生成的行 if let scene = GameScene.un
目录 1、业务背景 2、场景分析 3、流程设计 1、业务流程 2、导入流程
我是 Unity 的新手,所以修复起来可能非常简单。我使用了一个 3D Google SketchUp 模型,我想让玩家环顾模型。 super 简单。 我添加了 3D 平面,添加了相机并更新了设置以支
我需要标记要跳过的某些测试。但是,有些测试是参数化的,我只需要能够跳过某些场景。 我使用 py.test -m "hermes_only" 调用测试或 py.test -m "not hermes_o
我已经开始使用 SpecFlow 并想知道是否可以在规范之间重用场景 基本上我的想法是这样的(我可能从根本上是错误的:)) 我编写了一项功能来验证导航。 功能:导航 I should be able
在编写验证输入表单上的信息的 BDD 场景时,您将如何列出规则。 选项是: 1) 每个规则一个场景 2)场景大纲,每个领域和规则的例子 我们如何说某些不在特定字符集中的无效内容,例如: 鉴于我输入了一
我们如何使用 StoryQ 来测试预期出现异常的场景? 最佳答案 就实际代码而言,在测试代码的 .Then 部分,您需要创建一个 Action 或 Func 来确定正在测试的内容,然后在代码的 .Th
完成快速初学者努力通过点击按钮向场景添加节点。 我知道我可以使用点击手势来获取点击坐标并执行点击测试,然后在点击的 3D 空间中放置一个对象。但是,我想在设备屏幕的中央显示一个球体或十字准线,当点击屏
如何在表格中传递空格? Background: Given the following books |Author |(here several spaces)
我正在尝试从 Eric Haines' Standard Procedural Database (SPD) 渲染“mount”场景,但折射部分就是不想配合。我已经尝试了所有我能想到的方法来修复它。
我是一名优秀的程序员,十分优秀!