2016-02-22 18 views
0

我刚刚接受处理,在玩丹尼尔Shiffman Box2D库时出现错误。我正在尝试使用我在主程序中定义的矢量创建链形状。由于我需要创建多个曲面,因此我为对象创建了Vec2 [x] [y] x并为Vec2点创建了y链以创建链,但我一直使用“类型不匹配”main.Surface“与”不匹配“ “processing.core.PSurface”Box2d处理

这里是我的全部代码:

class Surface { 
     ArrayList<Vec2> surface; 
     int id; 


     Surface(int id_, int largo, Vec2 [] r) { 
     id=id_; 

     surface = new ArrayList<Vec2>(largo); 
     for(int i = 0 ; i < largo ; i++){ 
      surface.add(new Vec2(r[i])); 
     } 

     ChainShape chain = new ChainShape(); 

     Vec2[] vertices = new Vec2[surface.size()]; 
     for (int i = 0; i < vertices.length; i++) { 
      vertices[i] = box2d.coordPixelsToWorld(surface.get(i)); 
     } 

     chain.createChain(vertices, vertices.length); 

     BodyDef bd = new BodyDef(); 
     Body body = box2d.world.createBody(bd); 
     body.createFixture(chain, 1); 
     } 

    } 

    import shiffman.box2d.*; 
    import org.jbox2d.collision.shapes.*; 
    import org.jbox2d.common.*; 
    import org.jbox2d.dynamics.*; 
    PImage background; 

    Box2DProcessing box2d; 

    Vec2[][] base; 


    void setup() { 
     fullScreen(); 
     //size(1600,900); 
     background = loadImage("background.png"); 

     box2d = new Box2DProcessing(this); 
     box2d.createWorld(); 

     /////////////////////////////////////// 
      //Platforms positions vectors 
     /////////////////////////////////////// 

     base[0][0] = new Vec2(0 , 890.15); 
     base[0][1] = new Vec2(85.933 , 890.15); 
     base[0][2] = new Vec2(102.54 , 879.727); 
     base[0][3] = new Vec2(126.003 , 879.727); 
     base[0][4] = new Vec2(132.67 , 872.661); 
     base[0][5] = new Vec2(189.729 , 872.661); 
     base[0][6] = new Vec2(196.395 , 880.048); 
     base[0][7] = new Vec2(228.898 , 880.048); 
     base[0][8] = new Vec2(254.74 , 863.668); 
     base[0][9] = new Vec2(283.438 , 863.668); 
     base[0][10] = new Vec2(286.771 , 867.001); 

     base[1][0] = new Vec2 (319.063 , 850.122); 
     base[1][1] = new Vec2 (375.73 , 850.122); 

     base[2][0] = new Vec2 (409.408 , 818.401); 
     base[2][1] = new Vec2 (416.298 , 811.511); 
     base[2][2] = new Vec2 (468.999 , 811.511); 
     base[2][3] = new Vec2 (493.691 , 833.396); 
     base[2][4] = new Vec2 (540.313 , 833.396); 

     base[3][0] = new Vec2 (576.493 , 788.066); 
     base[3][1] = new Vec2 (646.003 , 788.066); 

     base[4][0] = new Vec2 (685.219 , 746.4); 
     base[4][1] = new Vec2 (746.885 , 746.4); 

     base[5][0] = new Vec2 (528.993 , 709.684); 
     base[5][1] = new Vec2 (652.474 , 709.684); 

     base[6][0] = new Vec2 (600.219 , 657.233); 
     base[6][1] = new Vec2 (663.993 , 657.233); 
     base[6][2] = new Vec2 (688.16 , 628.066); 
     base[6][3] = new Vec2 (723.16 , 628.066); 

     base[7][0] = new Vec2 (767.327 , 664.733); 
     base[7][1] = new Vec2 (894.827 , 664.733); 

     base[8][0] = new Vec2 (886.836 , 616.547); 
     base[8][1] = new Vec2 (942.807 , 616.547); 

     base[9][0] = new Vec2 (923.993 , 581.4); 
     base[9][1] = new Vec2 (969.827 , 581.4); 

     base[10][0] = new Vec2 (716.052 , 531.4); 
     base[10][1] = new Vec2 (769.385 , 531.4); 
     base[10][2] = new Vec2 (795.219 , 555.566); 
     base[10][3] = new Vec2 (866.052 , 555.566); 

     base[11][0] = new Vec2 (525.104 , 500.566); 
     base[11][1] = new Vec2 (666.215 , 500.566); 

     base[12][0] = new Vec2 (347.882 , 487.233); 
     base[12][1] = new Vec2 (395.104 , 487.233); 
     base[12][2] = new Vec2 (422.882 , 507.233); 
     base[12][3] = new Vec2 (471.771 , 507.233); 

     base[13][0] = new Vec2 (235.104 , 510.566); 
     base[13][1] = new Vec2 (306.215 , 510.566); 

     base[14][0] = new Vec2 (75.66 , 472.789); 
     base[14][1] = new Vec2 (198.993 , 472.789); 

     base[15][0] = new Vec2 (115.66 , 436.122); 
     base[15][1] = new Vec2 (181.771 , 436.122); 
     base[15][2] = new Vec2 (209.271 , 408.622); 
     base[15][3] = new Vec2 (243.993 , 408.622); 
     base[15][4] = new Vec2 (273.021 , 379.594); 
     base[15][5] = new Vec2 (316.215 , 379.594); 
     base[15][6] = new Vec2 (333.021 , 362.789); 
     base[15][7] = new Vec2 (377.327 , 362.789); 

     base[16][0] = new Vec2 (98.944 , 307.233); 
     base[16][1] = new Vec2 (153.993 , 307.233); 
     base[16][2] = new Vec2 (181.215 , 325.37); 
     base[16][3] = new Vec2 (247.882 , 325.37); 
     base[16][4] = new Vec2 (286.771 , 337.789); 
     base[16][5] = new Vec2 (320.66 , 337.789); 

     base[17][0] = new Vec2 (33.16 , 236.678); 
     base[17][1] = new Vec2 (60.938 , 236.678); 
     base[17][2] = new Vec2 (78.16 , 258.066); 
     base[17][3] = new Vec2 (102.049 , 258.066); 

     base[18][0] = new Vec2 (67.604 , 208.066); 
     base[18][1] = new Vec2 (98.944 , 208.066); 
     base[18][2] = new Vec2 (113.715 , 193.017); 
     base[18][3] = new Vec2 (136.215 , 193.017); 

     base[19][0] = new Vec2 (175.104 , 193.017); 
     base[19][1] = new Vec2 (205.66 , 193.017); 
     base[19][2] = new Vec2 (222.604 , 177.789); 
     base[19][3] = new Vec2 (247.604 , 177.789); 

     base[20][0] = new Vec2 (320.66 , 177.789); 
     base[20][1] = new Vec2 (568.993 , 177.789); 

     base[21][0] = new Vec2 (606.787 , 220.959); 
     base[21][1] = new Vec2 (685.219 , 220.959); 

     base[22][0] = new Vec2 (767.327 , 337.789); 
     base[22][1] = new Vec2 (875.415 , 337.789); 

     base[23][0] = new Vec2 (900.66 , 301.4); 
     base[23][1] = new Vec2 (1049.827 , 301.4); 
     base[23][2] = new Vec2 (1084.688 , 336.261); 
     base[23][3] = new Vec2 (1118.16 , 336.261); 

     base[24][0] = new Vec2 (1158.16 , 458.066); 
     base[24][1] = new Vec2 (1290.66 , 458.066); 

     base[25][0] = new Vec2 (1374.827 , 573.066); 
     base[25][1] = new Vec2 (1599.827 , 573.066); 
     ////////////////////////////////////////// 

     for(int i = 0 ; i < base.length ; i++){ 
     surface = new Surface (i, base[i].length , base[i]) ; 
     } 

    } 

    void draw() { 
     box2d.step(); 
     imageMode(CENTER); 
     image(background,width/2,height/2,1600,900); 
    } 

    ///////////////end///////////// 

所以,那我得到的问题是线6和169之间的问题是,当我尝试发送到表面构造(这是应该接收VEC 2 [] r)的基础[I]从无效设置(){}

我真的很感激任何帮助!错误我相信,来自构造函数类创建一个新的表面和我尝试推到构造函数的类的表面类型。这是在大学的作业,我有点反对时钟,所以任何帮助将是非常有用的!

非常感谢!

+0

你有没有得到这个整理出来? –

回答

0

处理3增加了一个surface变量PSurface

您不应该拥有自己的变量surface,因为它与现有的surface变量冲突。

要解决的第一个错误,只是改变你的surface变量的名称别的东西。

之后你这样做,你有另外一个问题:你从来没有在草图级别初始化surface变量。但是,当您更改变量名称时,这会变得更加明显。