Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gwt ClientBundle context.drawImage不';不显示图像?我的2D引擎_Image_Gwt_Canvas_Sprite_Clientbundle - Fatal编程技术网

gwt ClientBundle context.drawImage不';不显示图像?我的2D引擎

gwt ClientBundle context.drawImage不';不显示图像?我的2D引擎,image,gwt,canvas,sprite,clientbundle,Image,Gwt,Canvas,Sprite,Clientbundle,我的代码没有错误,但我看不到图像。图像与ClientBundle文件位于同一位置。对不起,有一段代码。事实上,我是GWT(以及Java)的新手。我自学。我进行了调试,看到映像已加载,所有类都已初始化,但画布到目前为止是空的。我使用NetBeans IDE 7.3。 如果有人能给我一些关于如何启动这个代码的建议,我会很高兴的。 首先谢谢你 \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

我的代码没有错误,但我看不到图像。图像与ClientBundle文件位于同一位置。对不起,有一段代码。事实上,我是GWT(以及Java)的新手。我自学。我进行了调试,看到映像已加载,所有类都已初始化,但画布到目前为止是空的。我使用NetBeans IDE 7.3。 如果有人能给我一些关于如何启动这个代码的建议,我会很高兴的。 首先谢谢你

\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 图像位于同一文件夹中

package info.alexpi.client.engine2D;

import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;

public interface ResourseInspector extends ClientBundle {
  public static final ResourseInspector INSTANCE = GWT.create(ResourseInspector.class); 

  @ClientBundle.Source("image1.png") 
  //GWT.getHostPageBaseURL() or GWT.getModuleBaseURL() - By the way, why it's not allowed to use here?
  ImageResource Img();

}
\uuuuuuuuuuuu点2D\uuuuuuuuu

 package info.alexpi.client.engine2D;

   public class Point2D {
   public int x = 0;
   public int y = 0;   
}
package info.alexpi.client.engine2D;

import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.dom.client.ImageElement;

public class Sprite2D {
   private Point2D pos = new Point2D();
   private ImgElement2D img;
   private double scale;
   private Rect2D rect = new Rect2D();

   public Sprite2D(ImgElement2D image2D){
      this.img = image2D;
      this.rect = image2D.getRect();
      this.scale = 1.0;
      this.pos.x = 0;
      this.pos.y = 0;
   }

   public void setImage(ImgElement2D image2D){
      this.img = image2D;
   }

   public ImgElement2D getImgElement(){
      return this.img;
   }
________________DRAWING ______________________
   public void draw(Context2d context){
      ImageElement el = this.img.getImg();
      if( el != null) {
      context.drawImage(el, rect.x, rect.y, 
          rect.w, rect.h, pos.x, pos.y, rect.w*scale, rect.h*scale);
      }
   }
package info.alexpi.client;

import com.google.gwt.canvas.client.Canvas;
import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.canvas.dom.client.CssColor;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import info.alexpi.client.engine2D.ImgElement2D;
import info.alexpi.client.engine2D.Point2D;
import info.alexpi.client.engine2D.Rect2D;
import info.alexpi.client.engine2D.ResourseInspector;
import info.alexpi.client.engine2D.Sprite2D;
import java.util.ArrayList;
import java.util.List;

public class gwtEntryPoint implements EntryPoint {
  static final String holderId = "canvasholder";
  static final String upgradeMessage = "Your browser does not support the HTML5 Canvas. "
                      + "Please upgrade your browser to view this demo.";
  Canvas canvas;
  Canvas backBuffer;
  Context2d context;
  Context2d backBufferContext;
  final CssColor redrawColor = CssColor.make("rgba(255,255,255,0.0)");

  // canvas size, in px
  static final int height = 712;
  static final int width = 800;
  boolean isFirstLoading = true;

  // mouse positions relative to canvas
  int mouseX, mouseY;

  //timer refresh rate, in milliseconds
  static final int refreshRate = 25;
  String imgAddress = GWT.getHostPageBaseURL() + "resources/images/Anthony-Catwalk-Dress.png";

  //String imgAddress = "resources/images/image1.png"; //Second place of image
  String cssAddress = GWT.getHostPageBaseURL() + "resources/myStyle.css";
  double scale = 0.7;
  List<Sprite2D> spriteList = new ArrayList<Sprite2D>();
  ImgElement2D im;

  public gwtEntryPoint() {
  }

 // init the canvases-------------------------------------------------------------------------
  void initCanvas(){
    canvas = Canvas.createIfSupported();
    backBuffer = Canvas.createIfSupported();
    if (canvas == null) {
      RootPanel.get(holderId).add(new Label(upgradeMessage));
      return;
    }

    canvas.setWidth(width + "px");
    canvas.setHeight(height + "px");
    canvas.setCoordinateSpaceWidth(width);
    canvas.setCoordinateSpaceHeight(height);
    backBuffer.setCoordinateSpaceWidth(width);
    backBuffer.setCoordinateSpaceHeight(height);
    canvas.setStyleName(cssAddress); //apply css style
    canvas.getElement().getStyle().setProperty("border", "3px solid #00F");
    RootPanel.get(holderId).add(canvas);
    context = canvas.getContext2d();
    backBufferContext = backBuffer.getContext2d();
  }

  // draw backBuffer ----------------------------------------------------------------------------
  public void drawBuffer(Context2d back, Context2d front){
      front.drawImage(back.getCanvas(), 0, 0);
   }

  void initElements(){

      im = new ImgElement2D(ResourseInspector.INSTANCE.Img()); //ImageResource loading
      Sprite2D sprite = new Sprite2D(im);
      Rect2D r = new Rect2D(0,0, 228, 720); //man
      sprite.setRect(r);
      spriteList.add(sprite);

      //im = new ImgElement2D(imgAddress); //another way of image loading (doesn't trigger)
      sprite = new Sprite2D(im);
      r = new Rect2D(226,12, 230, 283); //white T-shirt
      sprite.setRect(r);
      spriteList.add(sprite);
  }

  void doUpdate(){
      // update the back canvas
      backBufferContext.setFillStyle(redrawColor);
      backBufferContext.fillRect(0, 0, width, height);
      for(int x = 0; x < spriteList.size(); ++x){
         spriteList.get(x).draw(backBufferContext);
        // spriteList.get(x).draw(context);
      }

      drawBuffer(backBufferContext, context);
   }

   // init Assets & Timer -----------------------------------------------------------------------
   void initAssets(){
      initElements();

      final Timer timer = new Timer() {          
         @Override
         public void run() {
            doUpdate();
         }
      };
      timer.scheduleRepeating(refreshRate); 
   }

   @Override
   public void onModuleLoad() {
      initCanvas();
      initAssets();
   }
}
\uuuuuuRect2D\uuuuuuu

 package info.alexpi.client.engine2D;

   public class Point2D {
   public int x = 0;
   public int y = 0;   
}
package info.alexpi.client.engine2D;

import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.dom.client.ImageElement;

public class Sprite2D {
   private Point2D pos = new Point2D();
   private ImgElement2D img;
   private double scale;
   private Rect2D rect = new Rect2D();

   public Sprite2D(ImgElement2D image2D){
      this.img = image2D;
      this.rect = image2D.getRect();
      this.scale = 1.0;
      this.pos.x = 0;
      this.pos.y = 0;
   }

   public void setImage(ImgElement2D image2D){
      this.img = image2D;
   }

   public ImgElement2D getImgElement(){
      return this.img;
   }
________________DRAWING ______________________
   public void draw(Context2d context){
      ImageElement el = this.img.getImg();
      if( el != null) {
      context.drawImage(el, rect.x, rect.y, 
          rect.w, rect.h, pos.x, pos.y, rect.w*scale, rect.h*scale);
      }
   }
package info.alexpi.client;

import com.google.gwt.canvas.client.Canvas;
import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.canvas.dom.client.CssColor;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import info.alexpi.client.engine2D.ImgElement2D;
import info.alexpi.client.engine2D.Point2D;
import info.alexpi.client.engine2D.Rect2D;
import info.alexpi.client.engine2D.ResourseInspector;
import info.alexpi.client.engine2D.Sprite2D;
import java.util.ArrayList;
import java.util.List;

public class gwtEntryPoint implements EntryPoint {
  static final String holderId = "canvasholder";
  static final String upgradeMessage = "Your browser does not support the HTML5 Canvas. "
                      + "Please upgrade your browser to view this demo.";
  Canvas canvas;
  Canvas backBuffer;
  Context2d context;
  Context2d backBufferContext;
  final CssColor redrawColor = CssColor.make("rgba(255,255,255,0.0)");

  // canvas size, in px
  static final int height = 712;
  static final int width = 800;
  boolean isFirstLoading = true;

  // mouse positions relative to canvas
  int mouseX, mouseY;

  //timer refresh rate, in milliseconds
  static final int refreshRate = 25;
  String imgAddress = GWT.getHostPageBaseURL() + "resources/images/Anthony-Catwalk-Dress.png";

  //String imgAddress = "resources/images/image1.png"; //Second place of image
  String cssAddress = GWT.getHostPageBaseURL() + "resources/myStyle.css";
  double scale = 0.7;
  List<Sprite2D> spriteList = new ArrayList<Sprite2D>();
  ImgElement2D im;

  public gwtEntryPoint() {
  }

 // init the canvases-------------------------------------------------------------------------
  void initCanvas(){
    canvas = Canvas.createIfSupported();
    backBuffer = Canvas.createIfSupported();
    if (canvas == null) {
      RootPanel.get(holderId).add(new Label(upgradeMessage));
      return;
    }

    canvas.setWidth(width + "px");
    canvas.setHeight(height + "px");
    canvas.setCoordinateSpaceWidth(width);
    canvas.setCoordinateSpaceHeight(height);
    backBuffer.setCoordinateSpaceWidth(width);
    backBuffer.setCoordinateSpaceHeight(height);
    canvas.setStyleName(cssAddress); //apply css style
    canvas.getElement().getStyle().setProperty("border", "3px solid #00F");
    RootPanel.get(holderId).add(canvas);
    context = canvas.getContext2d();
    backBufferContext = backBuffer.getContext2d();
  }

  // draw backBuffer ----------------------------------------------------------------------------
  public void drawBuffer(Context2d back, Context2d front){
      front.drawImage(back.getCanvas(), 0, 0);
   }

  void initElements(){

      im = new ImgElement2D(ResourseInspector.INSTANCE.Img()); //ImageResource loading
      Sprite2D sprite = new Sprite2D(im);
      Rect2D r = new Rect2D(0,0, 228, 720); //man
      sprite.setRect(r);
      spriteList.add(sprite);

      //im = new ImgElement2D(imgAddress); //another way of image loading (doesn't trigger)
      sprite = new Sprite2D(im);
      r = new Rect2D(226,12, 230, 283); //white T-shirt
      sprite.setRect(r);
      spriteList.add(sprite);
  }

  void doUpdate(){
      // update the back canvas
      backBufferContext.setFillStyle(redrawColor);
      backBufferContext.fillRect(0, 0, width, height);
      for(int x = 0; x < spriteList.size(); ++x){
         spriteList.get(x).draw(backBufferContext);
        // spriteList.get(x).draw(context);
      }

      drawBuffer(backBufferContext, context);
   }

   // init Assets & Timer -----------------------------------------------------------------------
   void initAssets(){
      initElements();

      final Timer timer = new Timer() {          
         @Override
         public void run() {
            doUpdate();
         }
      };
      timer.scheduleRepeating(refreshRate); 
   }

   @Override
   public void onModuleLoad() {
      initCanvas();
      initAssets();
   }
}
\uuuuuuuuuuuuuuuuuuuuuuuuImgElement2D\uuuuuuuuuuuuuuuuu 我需要这个类来保持原始图像的宽度和高度

package info.alexpi.client.engine2D;

import com.google.gwt.dom.client.ImageElement;
import com.google.gwt.event.dom.client.ErrorEvent;
import com.google.gwt.event.dom.client.ErrorHandler;
import com.google.gwt.event.dom.client.LoadEvent;
import com.google.gwt.event.dom.client.LoadHandler;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;

public class ImgElement2D {
   private Rect2D rect = new Rect2D();
   private ImageElement imgElement;
   private Image tempImg;

public ImgElement2D(String imgAddress){
      try {
      Image.prefetch(imgAddress);
      tempImg = new Image(imgAddress);

     // SafeUri fromString = UriUtils.fromString(imgAddress);           
     // tempImg.setUrl(fromString); //SafeUri url

     // this method doesn't trigger
      tempImg.addLoadHandler(new LoadHandler(){
         @Override
         public void onLoad(LoadEvent event) {
            imgElement = (ImageElement) tempImg.getElement().cast();
            rect.x = 0;
            rect.y = 0;
            rect.h = tempImg.getHeight();
            rect.w = tempImg.getWidth();

            //RootPanel.get().remove(image);
         }
      });

   public ImgElement2D(ImageResource resource){
      tempImg = new Image(resource);
      rect.x = 0;
      rect.y = 0;
      rect.h = tempImg.getHeight();
      rect.w = tempImg.getWidth(); 
      imgElement = (ImageElement) tempImg.getElement().cast();

   }
\uuuuuuuuuuuu精灵2D\uuuuuuuuuuuu

 package info.alexpi.client.engine2D;

   public class Point2D {
   public int x = 0;
   public int y = 0;   
}
package info.alexpi.client.engine2D;

import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.dom.client.ImageElement;

public class Sprite2D {
   private Point2D pos = new Point2D();
   private ImgElement2D img;
   private double scale;
   private Rect2D rect = new Rect2D();

   public Sprite2D(ImgElement2D image2D){
      this.img = image2D;
      this.rect = image2D.getRect();
      this.scale = 1.0;
      this.pos.x = 0;
      this.pos.y = 0;
   }

   public void setImage(ImgElement2D image2D){
      this.img = image2D;
   }

   public ImgElement2D getImgElement(){
      return this.img;
   }
________________DRAWING ______________________
   public void draw(Context2d context){
      ImageElement el = this.img.getImg();
      if( el != null) {
      context.drawImage(el, rect.x, rect.y, 
          rect.w, rect.h, pos.x, pos.y, rect.w*scale, rect.h*scale);
      }
   }
package info.alexpi.client;

import com.google.gwt.canvas.client.Canvas;
import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.canvas.dom.client.CssColor;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import info.alexpi.client.engine2D.ImgElement2D;
import info.alexpi.client.engine2D.Point2D;
import info.alexpi.client.engine2D.Rect2D;
import info.alexpi.client.engine2D.ResourseInspector;
import info.alexpi.client.engine2D.Sprite2D;
import java.util.ArrayList;
import java.util.List;

public class gwtEntryPoint implements EntryPoint {
  static final String holderId = "canvasholder";
  static final String upgradeMessage = "Your browser does not support the HTML5 Canvas. "
                      + "Please upgrade your browser to view this demo.";
  Canvas canvas;
  Canvas backBuffer;
  Context2d context;
  Context2d backBufferContext;
  final CssColor redrawColor = CssColor.make("rgba(255,255,255,0.0)");

  // canvas size, in px
  static final int height = 712;
  static final int width = 800;
  boolean isFirstLoading = true;

  // mouse positions relative to canvas
  int mouseX, mouseY;

  //timer refresh rate, in milliseconds
  static final int refreshRate = 25;
  String imgAddress = GWT.getHostPageBaseURL() + "resources/images/Anthony-Catwalk-Dress.png";

  //String imgAddress = "resources/images/image1.png"; //Second place of image
  String cssAddress = GWT.getHostPageBaseURL() + "resources/myStyle.css";
  double scale = 0.7;
  List<Sprite2D> spriteList = new ArrayList<Sprite2D>();
  ImgElement2D im;

  public gwtEntryPoint() {
  }

 // init the canvases-------------------------------------------------------------------------
  void initCanvas(){
    canvas = Canvas.createIfSupported();
    backBuffer = Canvas.createIfSupported();
    if (canvas == null) {
      RootPanel.get(holderId).add(new Label(upgradeMessage));
      return;
    }

    canvas.setWidth(width + "px");
    canvas.setHeight(height + "px");
    canvas.setCoordinateSpaceWidth(width);
    canvas.setCoordinateSpaceHeight(height);
    backBuffer.setCoordinateSpaceWidth(width);
    backBuffer.setCoordinateSpaceHeight(height);
    canvas.setStyleName(cssAddress); //apply css style
    canvas.getElement().getStyle().setProperty("border", "3px solid #00F");
    RootPanel.get(holderId).add(canvas);
    context = canvas.getContext2d();
    backBufferContext = backBuffer.getContext2d();
  }

  // draw backBuffer ----------------------------------------------------------------------------
  public void drawBuffer(Context2d back, Context2d front){
      front.drawImage(back.getCanvas(), 0, 0);
   }

  void initElements(){

      im = new ImgElement2D(ResourseInspector.INSTANCE.Img()); //ImageResource loading
      Sprite2D sprite = new Sprite2D(im);
      Rect2D r = new Rect2D(0,0, 228, 720); //man
      sprite.setRect(r);
      spriteList.add(sprite);

      //im = new ImgElement2D(imgAddress); //another way of image loading (doesn't trigger)
      sprite = new Sprite2D(im);
      r = new Rect2D(226,12, 230, 283); //white T-shirt
      sprite.setRect(r);
      spriteList.add(sprite);
  }

  void doUpdate(){
      // update the back canvas
      backBufferContext.setFillStyle(redrawColor);
      backBufferContext.fillRect(0, 0, width, height);
      for(int x = 0; x < spriteList.size(); ++x){
         spriteList.get(x).draw(backBufferContext);
        // spriteList.get(x).draw(context);
      }

      drawBuffer(backBufferContext, context);
   }

   // init Assets & Timer -----------------------------------------------------------------------
   void initAssets(){
      initElements();

      final Timer timer = new Timer() {          
         @Override
         public void run() {
            doUpdate();
         }
      };
      timer.scheduleRepeating(refreshRate); 
   }

   @Override
   public void onModuleLoad() {
      initCanvas();
      initAssets();
   }
}
主要入口点

 package info.alexpi.client.engine2D;

   public class Point2D {
   public int x = 0;
   public int y = 0;   
}
package info.alexpi.client.engine2D;

import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.dom.client.ImageElement;

public class Sprite2D {
   private Point2D pos = new Point2D();
   private ImgElement2D img;
   private double scale;
   private Rect2D rect = new Rect2D();

   public Sprite2D(ImgElement2D image2D){
      this.img = image2D;
      this.rect = image2D.getRect();
      this.scale = 1.0;
      this.pos.x = 0;
      this.pos.y = 0;
   }

   public void setImage(ImgElement2D image2D){
      this.img = image2D;
   }

   public ImgElement2D getImgElement(){
      return this.img;
   }
________________DRAWING ______________________
   public void draw(Context2d context){
      ImageElement el = this.img.getImg();
      if( el != null) {
      context.drawImage(el, rect.x, rect.y, 
          rect.w, rect.h, pos.x, pos.y, rect.w*scale, rect.h*scale);
      }
   }
package info.alexpi.client;

import com.google.gwt.canvas.client.Canvas;
import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.canvas.dom.client.CssColor;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import info.alexpi.client.engine2D.ImgElement2D;
import info.alexpi.client.engine2D.Point2D;
import info.alexpi.client.engine2D.Rect2D;
import info.alexpi.client.engine2D.ResourseInspector;
import info.alexpi.client.engine2D.Sprite2D;
import java.util.ArrayList;
import java.util.List;

public class gwtEntryPoint implements EntryPoint {
  static final String holderId = "canvasholder";
  static final String upgradeMessage = "Your browser does not support the HTML5 Canvas. "
                      + "Please upgrade your browser to view this demo.";
  Canvas canvas;
  Canvas backBuffer;
  Context2d context;
  Context2d backBufferContext;
  final CssColor redrawColor = CssColor.make("rgba(255,255,255,0.0)");

  // canvas size, in px
  static final int height = 712;
  static final int width = 800;
  boolean isFirstLoading = true;

  // mouse positions relative to canvas
  int mouseX, mouseY;

  //timer refresh rate, in milliseconds
  static final int refreshRate = 25;
  String imgAddress = GWT.getHostPageBaseURL() + "resources/images/Anthony-Catwalk-Dress.png";

  //String imgAddress = "resources/images/image1.png"; //Second place of image
  String cssAddress = GWT.getHostPageBaseURL() + "resources/myStyle.css";
  double scale = 0.7;
  List<Sprite2D> spriteList = new ArrayList<Sprite2D>();
  ImgElement2D im;

  public gwtEntryPoint() {
  }

 // init the canvases-------------------------------------------------------------------------
  void initCanvas(){
    canvas = Canvas.createIfSupported();
    backBuffer = Canvas.createIfSupported();
    if (canvas == null) {
      RootPanel.get(holderId).add(new Label(upgradeMessage));
      return;
    }

    canvas.setWidth(width + "px");
    canvas.setHeight(height + "px");
    canvas.setCoordinateSpaceWidth(width);
    canvas.setCoordinateSpaceHeight(height);
    backBuffer.setCoordinateSpaceWidth(width);
    backBuffer.setCoordinateSpaceHeight(height);
    canvas.setStyleName(cssAddress); //apply css style
    canvas.getElement().getStyle().setProperty("border", "3px solid #00F");
    RootPanel.get(holderId).add(canvas);
    context = canvas.getContext2d();
    backBufferContext = backBuffer.getContext2d();
  }

  // draw backBuffer ----------------------------------------------------------------------------
  public void drawBuffer(Context2d back, Context2d front){
      front.drawImage(back.getCanvas(), 0, 0);
   }

  void initElements(){

      im = new ImgElement2D(ResourseInspector.INSTANCE.Img()); //ImageResource loading
      Sprite2D sprite = new Sprite2D(im);
      Rect2D r = new Rect2D(0,0, 228, 720); //man
      sprite.setRect(r);
      spriteList.add(sprite);

      //im = new ImgElement2D(imgAddress); //another way of image loading (doesn't trigger)
      sprite = new Sprite2D(im);
      r = new Rect2D(226,12, 230, 283); //white T-shirt
      sprite.setRect(r);
      spriteList.add(sprite);
  }

  void doUpdate(){
      // update the back canvas
      backBufferContext.setFillStyle(redrawColor);
      backBufferContext.fillRect(0, 0, width, height);
      for(int x = 0; x < spriteList.size(); ++x){
         spriteList.get(x).draw(backBufferContext);
        // spriteList.get(x).draw(context);
      }

      drawBuffer(backBufferContext, context);
   }

   // init Assets & Timer -----------------------------------------------------------------------
   void initAssets(){
      initElements();

      final Timer timer = new Timer() {          
         @Override
         public void run() {
            doUpdate();
         }
      };
      timer.scheduleRepeating(refreshRate); 
   }

   @Override
   public void onModuleLoad() {
      initCanvas();
      initAssets();
   }
}
package info.alexpi.client;
导入com.google.gwt.canvas.client.canvas;
导入com.google.gwt.canvas.dom.client.Context2d;
导入com.google.gwt.canvas.dom.client.CssColor;
导入com.google.gwt.core.client.EntryPoint;
导入com.google.gwt.core.client.gwt;
导入com.google.gwt.event.dom.client.ClickEvent;
导入com.google.gwt.event.dom.client.ClickHandler;
导入com.google.gwt.user.client.Timer;
导入com.google.gwt.user.client.ui.Label;
导入com.google.gwt.user.client.ui.RootPanel;
导入info.alexpi.client.engine2D.ImgElement2D;
导入info.alexpi.client.engine2D.Point2D;
导入info.alexpi.client.engine2D.Rect2D;
导入info.alexpi.client.engine2D.resourcesinspector;
导入info.alexpi.client.engine2D.Sprite2D;
导入java.util.ArrayList;
导入java.util.List;
公共类gEventryPoint实现入口点{
静态最终字符串持有者ID=“canvasholder”;
静态最终字符串upgradeMessage=“您的浏览器不支持HTML5画布。”
+“请升级浏览器以查看此演示。”;
帆布;
帆布背垫;
语境;
Context2d backBufferContext;
最终CssColor redrawColor=CssColor.make(“rgba(255255,0.0)”);
//画布大小,以像素为单位
静态最终内部高度=712;
静态最终整数宽度=800;
布尔值isFirstLoading=true;
//相对于画布的鼠标位置
int mouseX,mouseY;
//计时器刷新率,以毫秒为单位
静态最终整型刷新率=25;
字符串imgAddress=GWT.getHostPageBaseURL()+“resources/images/Anthony Catwalk Dress.png”;
//字符串imgAddress=“resources/images/image1.png”;//图像的第二位
字符串cssAddress=GWT.getHostPageBaseURL()+“resources/myStyle.css”;
双刻度=0.7;
List spriteList=new ArrayList();
imgelement2dim;
公共gwtEntryPoint(){
}
//在画布上-------------------------------------------------------------------------
void initCanvas(){
canvas=canvas.createIfSupported();
backBuffer=Canvas.createIfSupported();
if(canvas==null){
get(holderId).add(新标签(upgradeMessage));
返回;
}
canvas.setWidth(宽度+px);
canvas.setHeight(高度+px);
canvas.setCoordinateSpaceWidth(宽度);
canvas.setCoordinateSpaceHeight(高度);
backBuffer.setCoordinateSpaceWidth(宽度);
Backuffer.setCoordinateSpaceHeight(高度);
canvas.setStyleName(cssAddress);//应用css样式
canvas.getElement().getStyle().setProperty(“border”,“3px solid#00F”);
get(holderId).add(canvas);
context=canvas.getContext2d();
backBufferContext=backBuffer.getContext2d();
}
//拉回缓冲器----------------------------------------------------------------------------
公共空白提取缓冲区(Context2d背面,Context2d正面){
front.drawImage(back.getCanvas(),0,0);
}
void initElements(){
im=new-ImgElement2D(resourcesinspector.INSTANCE.Img());//图像资源加载
Sprite2D sprite=新Sprite2D(im);
rect2dr=新的Rect2D(0,0228720);//人
雪碧。setRect(r);
精灵列表。添加(精灵);
//im=新的ImgElement2D(imgAddress);//另一种图像加载方式(不触发)
精灵=新精灵2D(im);
r=新的Rect2D(226,1230283);//白色T恤
雪碧。setRect(r);
精灵列表。添加(精灵);
}
void doUpdate(){
//更新后画布
backBufferContext.setFillStyle(重画颜色);
backBufferContext.fillRect(0,0,宽度,高度);
对于(int x=0;x
请参见

这是因为,当前,
新图像(imageResource)
使用空白GIF并将
图像资源
作为背景图像。这已在master中修复,并将在今年晚些时候在GWT 2.6中发布。
解决方法是使用
新图像(imageResource.getSafeUri())
。在IE6/7中使用sprited图像是不安全的,但是那里不支持canvas,所以在这种情况下这不是一个真正的问题(注意,您可以将任何排列配置为使用sprited图像,而不是
数据:
URL,所以从技术上讲,使用
getSafeUri()是不安全的
在任何浏览器中;GWT 2.6将添加一个
isStandalone()
方法来告诉您何时可以安全使用它,这就是
新建图像(imageResource)