java – 如何使用Vaadin创建交互式图形?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何使用Vaadin创建交互式图形?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3142字,纯文字阅读大概需要5分钟。
内容图文
我想开发一个简单的互动游戏(如arcanoid).我已经实现了一个菜单和不同的视图,现在我需要开发实际游戏(绘制飞球,一些可移动平台),我不知道该怎么做.我需要像画布一样的东西,我可以在每一帧画出我的图形.
我试着用Canvas和Timer实现这个.但它不希望更新图形本身,但只有当用户点击屏幕或类似时.我也看到了com.google.gwt.canvas.client.Canvas,但我无法理解如何在Vaadin应用程序中使用它.
接下来我的问题是:是否有可能以任何方式以高帧率绘制每帧的图形?如果可能的话,我该怎么做?
附:我使用Vaadin 7.3.3.
解决方法:
稍后再加:
Here is a link to my educational project with implementation below.
如果有人帮我,我会很高兴的.
原始答案:
嗯……我自己找到了解决方案.首先,我创建了自己的小部件 – “客户端”组件(根据此article).
客户端部分:
public class GWTMyCanvasWidget extends Composite {
public static final String CLASSNAME = "mycomponent";
private static final int FRAMERATE = 30;
public GWTMyCanvasWidget() {
canvas = Canvas.createIfSupported();
initWidget(canvas);
setStyleName(CLASSNAME);
}
连接器:
@Connect(MyCanvas.class)
public class MyCanvasConnector extends AbstractComponentConnector {
@Override
public Widget getWidget() {
return (GWTMyCanvasWidget) super.getWidget();
}
@Override
protected Widget createWidget() {
return GWT.create(GWTMyCanvasWidget.class);
}
}
服务器端部分:
public class MyCanvas extends AbstractComponent {
@Override
public MyCanvasState getState() {
return (MyCanvasState) super.getState();
}
}
然后我只在我的视图上添加MyCanvas组件:
private void createCanvas() {
MyCanvas canvas = new MyCanvas();
addComponent(canvas);
canvas.setSizeFull();
}
现在我可以在Canvas上绘制任何东西(在GWTMyCanvasWidget的客户端),性能很好=).例:
public class GWTMyCanvasWidget extends Composite {
public static final String CLASSNAME = "mycomponent";
private static final int FRAMERATE = 30;
private Canvas canvas;
private Platform platform;
private int textX;
public GWTMyCanvasWidget() {
canvas = Canvas.createIfSupported();
canvas.addMouseMoveHandler(new MouseMoveHandler() {
@Override
public void onm ouseMove(MouseMoveEvent event) {
if (platform != null) {
platform.setCenterX(event.getX());
}
}
});
initWidget(canvas);
Window.addResizeHandler(new ResizeHandler() {
@Override
public void onResize(ResizeEvent resizeEvent) {
resizeCanvas(resizeEvent.getWidth(), resizeEvent.getHeight());
}
});
initGameTimer();
resizeCanvas(Window.getClientWidth(), Window.getClientHeight());
setStyleName(CLASSNAME);
platform = createPlatform();
}
private void resizeCanvas(int width, int height) {
canvas.setWidth(width + "px");
canvas.setCoordinateSpaceWidth(width);
canvas.setHeight(height + "px");
canvas.setCoordinateSpaceHeight(height);
}
private void initGameTimer() {
Timer timer = new Timer() {
@Override
public void run() {
drawCanvas();
}
};
timer.scheduleRepeating(1000 / FRAMERATE);
}
private void drawCanvas() {
canvas.getContext2d().clearRect(0, 0, canvas.getCoordinateSpaceWidth(), canvas.getCoordinateSpaceHeight());
drawPlatform();
}
private Platform createPlatform() {
Platform platform = new Platform();
platform.setY(Window.getClientHeight());
return platform;
}
private void drawPlatform() {
canvas.getContext2d().fillRect(platform.getCenterX() - platform.getWidth() / 2, platform.getY() - 100, platform.getWidth(), platform.getHeight());
}
}
内容总结
以上是互联网集市为您收集整理的java – 如何使用Vaadin创建交互式图形?全部内容,希望文章能够帮你解决java – 如何使用Vaadin创建交互式图形?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。