Skip to main content
edited tags
Link
pangaea
  • 215
  • 2
  • 9
added 103 characters in body
Source Link
pangaea
  • 215
  • 2
  • 9

However, I think that is bad for memory. I don't know how to solve this. I think I need to use an array list. Maybe, create an array list of grass and then add elements in it.

However, I think that is bad for memory. I don't know how to solve this.

However, I think that is bad for memory. I don't know how to solve this. I think I need to use an array list. Maybe, create an array list of grass and then add elements in it.

Source Link
pangaea
  • 215
  • 2
  • 9

sprite array problem with initialization

I have a problem with my Sprites. I'm trying to create a lot of Sprites. However, I got a problem in that I have several grass tiles and I don't want to do this

grass1 = new Sprite...; grass2 = new Sprite..;

The problem is I make an array of Sprites say Sprite[] grass = new Sprite[7]; I don't know how I would intialize them. I need to put

for(int i=0; i<grass.length;i++){
        grass[i] = new Sprite(16,0,i,SpriteSheet.tiles);
    }

Somewhere, however I get an error saying you have to put it in a bracket. I get a syntax error. I'm thinking that I should put it into the constructor so I have

    public Sprite(){
    for(int i=0; i<grass.length;i++){
            grass[i] = new Sprite(16,0,i,SpriteSheet.tiles);
         }
    }

However, I think that is bad for memory. I don't know how to solve this.

   public class Sprite {
        public final int SIZE;
        private int x;
        private int y;
        public int[] pixels;
        private SpriteSheet sheet;
        
        public static Sprite[] grass = new Sprite[7];
        for(int i=0; i<grass.length;i++){
            grass[i] = new Sprite(16,0,i,SpriteSheet.tiles);
        }
    
        public static Sprite voidTile = new Sprite(16,0xffffff);
        
        public static Sprite player_up = new Sprite(32,0,5, SpriteSheet.tiles);
        public static Sprite player_back = new Sprite(32,2,5, SpriteSheet.tiles);
        public static Sprite player_right = new Sprite(32,1,5, SpriteSheet.tiles);
        public static Sprite player_left = new Sprite(32,3,5, SpriteSheet.tiles);
        
        public static Sprite player_up1 = new Sprite(32,0,6, SpriteSheet.tiles);
        public static Sprite player_back1 = new Sprite(32,2,6, SpriteSheet.tiles);
        public static Sprite player_right1 = new Sprite(32,1,6, SpriteSheet.tiles);
        public static Sprite player_left1 = new Sprite(32,3,6, SpriteSheet.tiles);
        
        public static Sprite player_up2 = new Sprite(32,0,7, SpriteSheet.tiles);
        public static Sprite player_back2 = new Sprite(32,2,7, SpriteSheet.tiles);
        public static Sprite player_right2 = new Sprite(32,1,7, SpriteSheet.tiles);
        public static Sprite player_left2 = new Sprite(32,3,7, SpriteSheet.tiles);
        
        public Sprite(int size, int x, int y, SpriteSheet sheet){
            this.SIZE=size;
            pixels = new int[SIZE*SIZE];
            this.x=x*SIZE;
            this.y=y*SIZE;
            this.sheet = sheet;
            load();
        }
        
        public Sprite(int size, int colour){
            SIZE=size;
            pixels= new int[size*size];
            setColour(colour);
        }
    
        private void setColour(int colour) {
            for(int i=0; i<SIZE*SIZE; i++){
                pixels[i]=colour;
            }
        }
    
        private void load() {
            for(int y=0; y<SIZE; y++){
                for(int x=0; x<SIZE; x++){
                    pixels[x+y*SIZE]=sheet.pixels[(this.x+x)+(this.y+y)*sheet.SIZE];
                }
            }
            
        }
        
    
    }