This site requires JavaScript, please enable it in your browser!
Greenfoot back
DaRafster
DaRafster wrote ...

2020/2/12

Re-sizing Image

DaRafster DaRafster

2020/2/12

#
When I resize my world, I want it so everything within "MyWorld" will shrink as well. Don't give me a direct answer, just some hints guiding me on what I should do. Here is my code:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)



/**
 * A Minecraft Landscape built through various amounts of rectangles
 * 
 * -----
 * 
 * (2020 - 02 - 11)
 */



public class MyWorld extends World



{
    private GreenfootImage myImage;
    
    /**
     * Constructor for objects of class MyWorld.
     * 
     */
    public MyWorld()
    {    
        
        
        
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(600, 400, 1); 
        
        myImage = new GreenfootImage(600,400);
        
        
        
        //--------------------------------------------------------------------------------- 
        
        
        
        /*
         * BACKGROUND
         * Creating a blue sky by making a rectangle that occupies the whole canvas
         */
        
        background(0,0,600,400); 
        
        
        
        //---------------------------------------------------------------------------------
        
        
        
        /*
         * CLOUDS
         * Creating an outline of each cloud with different values
         * Colouring each cloud white
         */ 
        
        // Colouring each cloud (White)
        creatingClouds(40,75,100,45); 
        creatingClouds(150,20,125,35);
        creatingClouds(360,50,115,40);
        
        // Outline of each cloud
        creatingClouds(40,75,100,45);
        creatingClouds(150,20,125,35);
        creatingClouds(360,50,115,40);
        
        
        
        //---------------------------------------------------------------------------------
        
        
        
        /*
         * ZOMBIE
         * Creating an outline of the zombie
         * Zombie is made through several rectangles creating a zombie figure 
         * Colouring each rectangle making up the zombie
         * Some rectangles contain different RGB values 
         */
        
        // Colouring zombie (Dark Green, RGB: 64, 128, 64)
        colouringMobsRGB(442,210,50,50,64,128,64);
        colouringMobsRGB(505,270,15,15,64,128,64); 
        colouringMobsRGB(450,335,32,14,64,128,64); 
        colouringMobsRGB(482,270,23,15,64,128,64);
        
        // Colouring zombie torso (Faded Light Blue, RGB: 112, 146, 190)
        colouringMobsRGB(451,261,31,59,112,146,190);
        colouringMobsRGB(482,270,23,15,112,146,190);
        
        // Colouring zombie pants (Dark Blue, RGB: 63, 72, 204)
        colouringMobsRGB(450,320,32,15,63,72,204);
        
        // Colouring zombie eye and mouth (White)
        colouringMobsGeneric(482,250,10,10, Color.WHITE); 
        colouringMobsGeneric(470,225,15,7, Color.WHITE); 
        
        // Outline of each zombie body part  
        drawingMobs(442,210,50,50);
        drawingMobs(450,260,32,60);
        drawingMobs(482,270,23,15);
        drawingMobs(505,270,15,15);
        drawingMobs(442,210,50,50);
        drawingMobs(450,335,32,14);
        drawingMobs(470,225,15,7);
        drawingMobs(482,250,10,10);
        drawingMobs(450,320,32,15);
        
        
        
        //---------------------------------------------------------------------------------
        
        
        
        /*
         * CREEPER
         * Creating an outline of creeper
         * Creeper is made of several rectangles creating it's figure
         * Colouring each rectangle making up the creeper
         */
        
        // Colouring creeper skin (Semi - Dark Green, RGB: 34, 177, 76)
        colouringMobsRGB(81,201,49,48,34,177,76);
        colouringMobsRGB(92,251,27,79,34,177,76);
        colouringMobsRGB(75,331,24,18,34,177,76);
        colouringMobsRGB(111,331,24,18,34,177,76);
        
        // Colouring the creeper's eye and mouth (White)
        colouringMobsGeneric(111,216,14,7, Color.WHITE); 
        colouringMobsGeneric(119,241,11,9, Color.WHITE);
        
        // Outlining each creeper body part
        drawingMobs(80,200,50,50); 
        drawingMobs(91,250,28,80); 
        drawingMobs(74,330,25,19); 
        drawingMobs(110,330,25,19);
        drawingMobs(110,215,15,8); 
        drawingMobs(118,240,12,10);
        
        
        
        //---------------------------------------------------------------------------------
        
        
     
        /*
         * SUN
         * Creating an outline of the sun
         * Colouring the rectangle the makes the sun
         */
        
        // Colouring the sun
        createSun(500,30,80,80);
        
        // Outlining the sun
        createSun(500,30,80,80);
        
        
        
        //---------------------------------------------------------------------------------
        
        
        
        /*
         * TREE
         * Creating an outline of the tree trunk + the leaves of the tree
         * Tree trunk is made of rectangle while the leaves are made of a polygon 
         * Colouring the rectangle and polygon that make up the tree trunk and leaves
         */
        
        // Colouring and outlining the rectangle making up the tree trunk
        createTreeTrunk(280,200,50,149); 
        
        // Colouring and outlining the polygon making up the leaves of the tree
        createTree(200,200);
        
        
        
        //---------------------------------------------------------------------------------
        
        
        
        /*
         * GRASS
         * Creating an outline of a rectangle making up the grass / ground
         * Colouring in the rectangle green to make up grass
         */
        
        // Colouring the rectangle making up the grass
        createGrass(0,350,600,50);
        
        // Outlining the rectangle making up the grass
        createGrass(0,350,600,50);
        
        
        
        //---------------------------------------------------------------------------------
        
        
        
        /*
         * TEXT
         * Writing text
         * X, Y values determing it's position
         * Font used is "Garmant"
         */
        
        // Writing "Hello World"
        writeText("Hello World!", 255, 385);
        
        // Writing "Creeper"
        writeText("Creeper?", 150, 235);
        
        // Writing "Awww mannn"
        writeText("Awww mannn", 155, 275);
        
        
        
        //--------------------------------------------------------------------------------- 
        
        
        
        Picture minecraftLandscape = new Picture(myImage);
        addObject(minecraftLandscape, 300, 200);
        
        
         
    }
    
    
    
    public void createGrass(int x, int y, int width, int height)
    {
        
        myImage.setColor(new Color(89,197,121));
        myImage.fillRect(x, y, width, height);
        
        myImage.setColor(Color.BLACK);
        myImage.drawRect(x, y, width, height);
        
    }
    
    
    
    public void background(int x, int y, int width, int height)
    {
        
        myImage.setColor(new Color(0,162,232));
        myImage.fillRect(x, y, width, height); 
        
    }
    
    
    
    public void writeText(String message, int x, int y) 
    { 
        
        myImage.setColor(Color.YELLOW);
        Font myFont = new Font("Garmant", true, true, 18);
        myImage.setFont(myFont);
        myImage.drawString(message,x ,y);
   
    }
    
    
    
    public void creatingClouds(int x, int y, int width, int height)
    {
        
        myImage.setColor(Color.WHITE);
        myImage.fillRect(x, y, width, height);
        
        myImage.setColor(Color.BLACK);
        myImage.drawRect(x, y, width, height);
 
    }   
        
    
    
    public void drawingMobs(int x, int y, int width, int height)
    {
        
        myImage.setColor(Color.BLACK);
        myImage.drawRect(x, y, width, height);
        
    }
    
     
    
    public void colouringMobsRGB(int x, int y, int width, int height, int r, int g, int b)
    {
        
        myImage.setColor(new Color(r,g,b));
        myImage.fillRect(x, y, width, height);
        
    }
        
    
    
    public void colouringMobsGeneric(int x, int y, int width, int height, Color c)
    {
        
        myImage.setColor(c);
        myImage.fillRect(x, y, width, height);
        
    }
    
    
    
    public void createSun(int x, int y, int width, int height)
    {
       
       myImage.setColor(Color.YELLOW);
       myImage.fillRect(x, y, width, height);
       
       myImage.setColor(Color.BLACK);
       myImage.drawRect(x, y, width, height);
       
    }
    
    
    
    public void createTree(int bottomLeftX, int bottomLeftY)
    {
        
        int change = 80;
        int change1 = 28;
        int change3 = 5;
        int change4 = 35;
        int change5 = 30;
        int change6 = 50;
        
        int[] xValues = {bottomLeftX, bottomLeftX, bottomLeftX + change, bottomLeftX + change, bottomLeftX + 
                         change*2 - change1, bottomLeftX + change*2 - change1, bottomLeftX + change*3 - change5, bottomLeftX + change*3 - change5};
        
        int[] yValues = {bottomLeftY, bottomLeftY - change - change3, bottomLeftY - change - change3, bottomLeftY 
                         - change - change6, bottomLeftY - change - change6, bottomLeftY - change - change3, 
                         bottomLeftY - change - change3, bottomLeftY};
        int points = 8;
        
        myImage.setColor(new Color(34,177,76));
        myImage.fillPolygon(xValues,yValues,points);
        
        myImage.setColor(Color.BLACK);
        myImage.drawPolygon(xValues,yValues,points);
        
    }
    
    
    
    public void createTreeTrunk(int x, int y, int width, int height)
    {
        
        myImage.setColor(new Color(185,122,87));
        myImage.fillRect(x, y, width, height);
        
        myImage.setColor(Color.BLACK);
        myImage.drawRect(x, y, width, height);
        
    }
    
    
    
    public void changingSize(int width, int height)
    {
        
    }
    
}
and here is my code for my actor receiving all this information:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Picture here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Picture extends Actor
{
    
    public Picture(GreenfootImage myImage) 
    {
        setImage(myImage);// Add your action code here.
    }    
}
Super_Hippo Super_Hippo

2020/2/12

#
Most numbers have to depend on the size. So for example instead of “draw a line between (200|300) and (300|200)“ you could do “draw a line between (width/3|3*height/4) and (width/2|height/2)”.
DaRafster DaRafster

2020/2/13

#
Super_Hippo wrote...
Most numbers have to depend on the size. So for example instead of “draw a line between (200|300) and (300|200)“ you could do “draw a line between (width/3|3*height/4) and (width/2|height/2)”.
Sorry, can you explain this in more beginner like terms, only a month into programming, still working on my understanding.
danpost danpost

2020/2/13

#
I would start with a static int variable that contains a zoom percent value initialized at 100 (percent) and base all image sizes (and world dimensions) on it. You can then reduce its value and create a new world to resize everything. Just make sure you do not let the field value get too low (10 might be a fair minimum value). When sizing, multiply by zoom factor, then divide by 100 (<< originial size >> * zoomPercent/100).
You need to login to post a reply.