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

2015/3/5

How do i make text like the games legend of zelda and pokemon ?

1
2
CodeDaySwag CodeDaySwag

2015/3/5

#
how do i make text appear on world when i see a certain person within the game and how do i make it when ever i press enter the text continues on with whatever it has to say ? thanks
CodeDaySwag CodeDaySwag

2015/3/6

#
nice no replies
danpost danpost

2015/3/7

#
I noticed your post several times; but, I am not familiar with Legend of Zelda or Pokemon. I would rather ask how you want your text to display -- not how they are displayed in those games. You also need to attempt to do something code-wise along this line and then, when you run into an issue, ask for help (showing the code you used, giving detailed reports on any error messages, and describing what it is doing compared to what you want it to do.
danpost danpost

2015/3/7

#
A simple Dialog class might be something like this:
import greenfoot.*;
 
public class Dialog extends Actor
{
    private String[] dialog;
 
    public Dialog(String[] spokenLines)
    {
        dialog = spokenLines;
    }
 
    protected void addedToWorld(World world)
    {
        for (int i=0; i<dialog.length; i++)
        {
            dialog[i] += "\n\npress 'enter' to proceed";
            GreenfootImage image = new GreenfootImage(dialog[i], 20, null, java.awt.Color.white);
            image.drawRect(0, 0, image.getWidth()-1, image.getHeight()-1);
            setImage(image);
            while (!"enter".equals(Greenfoot.getKey())) Greenfoot.delay(1);
        }
        world.removeObject(this);
    }
}
The code has been tested and corrected. The following would be an example of its use:
String[] expressions = new String[]
{
    "Man 1:  Hey, there.  Are you heading up that there road?",
    "Man 2:  As a matter of fact, yes.  Why?",
    "Man 1:  You may want to find another way 'round.\nRumor has it, zombies be up there!",
    "Man 2:  Well, thanks very much.  I appreciate the heads up."
};
getWorld().addObject(new Dialog(expressions), getX(), getY()-70);
CodeDaySwag CodeDaySwag

2015/3/7

#
i tried the code before but it doesnt display all of it on the screen and it cuts off and i also couldnt get it to move on to the next line of command
danpost danpost

2015/3/7

#
Things you can do: (a) decrease the '20' on line 17 to make the textbox smaller; or, (b) change were the dialog is placed in the world (line 8 in the second code-set); you can place it center-world using this:
getWorld().addObject(new Dialog(expressions), getWorld().getWidth()/2, getWorld().getHeight()/2);
or, (c) remove one of the new line escape sequences ( '\n' ) from the appending string to the dialog expression on line 16
CodeDaySwag CodeDaySwag

2015/3/7

#
so did what you said but i changed some colors and sizes basic stuff....but the dialog never seems to end...once im at the last line and i press enter it goes back to first i tried to make it check is its at the last line then when you press enter it just removes the whole thing
danpost danpost

2015/3/7

#
You need to place the second code-set above within an 'if' block to regulate the showing of the dialog. There are several ways to regulate it. One would be to set up a boolean field to indicate whether it has been displayed or not:
// add instance field
private boolean dialogShown;
// the 'if'
if ( ! dialogShown)
{
    // second code-set above here
    dialogShown = true;
}
If you have multiple dialogs, you can put them in an array (of arrays) and nullify (or empty out) each dialog as they are used. Then use:
if (dialogs[dialogNumber] != null) // if nullifying by using 'dialogs[dialogNumber] = null;'
// or
if (dialogs[dialogNumber].length > 0) // if emptying by using 'dialogs[dialogNumber] = new String[] {};'
CodeDaySwag CodeDaySwag

2015/3/8

#
thanks it worked but i have a question about animations this is my code but it stops at around image 3-4 im not sure which one..am i missing something?
GreenfootImage image0 =  new   GreenfootImage("boom1.png");
    GreenfootImage image1 =  new   GreenfootImage("boom2.png");
    GreenfootImage image2 =  new   GreenfootImage("boom3.png");
    GreenfootImage image3 =  new   GreenfootImage("boom4.png");
    GreenfootImage image4 =  new   GreenfootImage("boom5.png");
    GreenfootImage image5 =  new   GreenfootImage("boom6.png");
    GreenfootImage image6 =  new   GreenfootImage("boom7.png");
    GreenfootImage image7 =  new   GreenfootImage("boom8.png");
    GreenfootImage image8 =  new   GreenfootImage("boom9.png");
    GreenfootImage image9 =  new   GreenfootImage("boom10.png");
    GreenfootImage image10 = new   GreenfootImage("boom11.png");
    GreenfootImage image11 = new   GreenfootImage("boom12.png");
    GreenfootImage image12 = new   GreenfootImage("boom13.png");
public void act()
{

test();


}
public void test()
    {

        if(Greenfoot.isKeyDown("H"))
        {    
            setImage(image1);
             if(getImage() == image1)
                setImage(image2);
            else if(getImage() == image2)
                setImage(image3);
            else if(getImage() == image3)
                setImage(image4);
            else if(getImage() == image4)
                setImage(image5);
            else if(getImage() == image5)
                setImage(image6);
            else if(getImage() == image6)
                setImage(image7);
            else if(getImage() == image7)
                setImage(image8);
            else if(getImage() == image8)
                setImage(image9);
            else if(getImage() == image9)
                setImage(image10);
            else if(getImage() == image10)
                setImage(image11);
            else if(getImage() == image11)
                setImage(image12);
            
            

        }

    }
thanks
danpost danpost

2015/3/8

#
Are you releasing the "H" key? The animation will only run (as written) if the key is down. Once you release the key, the animation will stop regardless of which image it is currently on.
CodeDaySwag CodeDaySwag

2015/3/8

#
i just tested and it stops at image 4 every time and just for info i am not using it for the H key its just a test im gonna use it for when the bomb explodes and stuff like that ... i just wanna see the animation run first thanks
danpost danpost

2015/3/8

#
You may want to show the rest of the code for that class -- as they problem is not apparent with what minimal code you gave.
CodeDaySwag CodeDaySwag

2015/3/8

#
i mean the rest of the class has nothing honestly but ok
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class MainPlayer here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Player extends Players
{
    //images for animation

    GreenfootImage WalkBack = new GreenfootImage("WalkBack.png");
    GreenfootImage WalkDown = new GreenfootImage("WalkDown.png");
    GreenfootImage WalkLeft = new GreenfootImage("WalkLeft.png");
    GreenfootImage WalkRight = new GreenfootImage("WalkRight.png");
    private boolean spaceDown;
    private boolean ZDown;
    public int health = 6;
    public int power = 0;
    GreenfootImage image0 =  new   GreenfootImage("boom1.png");
    GreenfootImage image1 =  new   GreenfootImage("boom2.png");
    GreenfootImage image2 =  new   GreenfootImage("boom3.png");
    GreenfootImage image3 =  new   GreenfootImage("boom4.png");
    GreenfootImage image4 =  new   GreenfootImage("boom5.png");
    GreenfootImage image5 =  new   GreenfootImage("boom6.png");
    GreenfootImage image6 =  new   GreenfootImage("boom7.png");
    GreenfootImage image7 =  new   GreenfootImage("boom8.png");
    GreenfootImage image8 =  new   GreenfootImage("boom9.png");
    GreenfootImage image9 =  new   GreenfootImage("boom10.png");
    GreenfootImage image10 = new   GreenfootImage("boom11.png");
    GreenfootImage image11 = new   GreenfootImage("boom12.png");
    GreenfootImage image12 = new   GreenfootImage("boom13.png");

    public void act() 
    {
        move();
        attack1();
        attack2();
        die();
        removeHearts();
        pauseScreen();
        test();

        addPower();
        checkPower();

        //act method does whatever the Actor wants to do. This method is called whenever the
        //act or run button gets pressed in the enviroment
    }

    public void move()
    {
        int x = getX();
        int y = getY();
        //moving 
        if(Greenfoot.isKeyDown("up"))
        {
            setLocation(getX(), getY()-2);
            setImage(WalkBack);
            if ( isTouching(Walls.class) )
            {
                setLocation(getX(), getY()+2);
                //checks walls
            }
            if(canSee(Enemy1.class))
            {
                setLocation(getX(), getY()+10);

                health--;
                removeHearts();
            }
        }
        if(Greenfoot.isKeyDown("down"))
        {
            setLocation(getX(), getY()+2);
            setImage(WalkDown);
            if ( isTouching(Walls.class) )
            {
                setLocation(getX(), getY()-2);
                //checks walls
            }
            if(canSee(Enemy1.class))
            {
                setLocation(getX(), getY()-10);

                health--;
                removeHearts();

            }

        }
        if(Greenfoot.isKeyDown("left"))
        {
            setLocation(getX()-2, getY());
            setImage(WalkLeft);
            if ( isTouching(Walls.class) )
            {
                setLocation(getX()+2, getY());
                //checks walls
            }
            if(canSee(Enemy1.class))
            {
                setLocation(getX()+10, getY());

                health--;
                removeHearts();

            }

        }
        if(Greenfoot.isKeyDown("right"))
        {
            setLocation(getX()+2, getY());
            setImage(WalkRight);
            if ( isTouching(Walls.class) )
            {
                setLocation(getX()-2, getY());
                //checks walls
            }
            if(canSee(Enemy1.class))
            {
                setLocation(getX()-10, getY());

                health--;
                removeHearts();

            }

        }
        //moving 

    }

    public void attack1()

    {
        //attacking the enemy
        if (spaceDown != Greenfoot.isKeyDown("space")) 
        {
            spaceDown = ! spaceDown; 
            if (spaceDown) 
            {  
                Attack1 attack1 = new Attack1();
                getWorld().addObject(attack1, getX()+1, getY());
                if(getImage() == WalkLeft)
                { 
                    attack1.setRotation(180);

                }
                if(getImage() == WalkRight)
                {
                    attack1.setRotation(0);
                }
                if(getImage() == WalkBack)
                {
                    attack1.setRotation(270);

                }
                if(getImage() == WalkDown)
                {
                    attack1.setRotation(90);

                }
            }
        }

    }

    public void attack2()
    {
        if (ZDown != Greenfoot.isKeyDown("Z"))
        {
            ZDown = ! ZDown;
            if(ZDown)
            {
                Attack2 attack2 = new Attack2();
                getWorld().addObject(attack2, getX(), getY());

            }
        }

    }

    public void die()
    {

        if(health <= 0)
        {
            Lose lose = new Lose();
            getWorld().removeObjects(getWorld().getObjects(Heart.class));
            getWorld().addObject(lose, 140, 140);
        }
    }

    public  void removeHearts()
    {

        if(health == 5)
        {
            getWorld().removeObjects(getWorld().getObjects(Heart6.class));
        }else if(health == 4) 
        {
            getWorld().removeObjects(getWorld().getObjects(Heart5.class));
        }else if(health == 3)
        {
            getWorld().removeObjects(getWorld().getObjects(Heart4.class));
        }else if(health == 2)
        {
            getWorld().removeObjects(getWorld().getObjects(Heart3.class));
        }else if(health == 1)
        {
            getWorld().removeObjects(getWorld().getObjects(Heart2.class));

        }else if(health <= 0)
        {
            die();

        }

    }

    public void pauseScreen()
    {
        if(Greenfoot.isKeyDown("escape"))
        {
            Pause pause = new Pause();
            getWorld().addObject(pause, 140, 140);
            Greenfoot.stop();

        }
    }

    public void addPower()
    {
        if(canSee(PowerUp1.class))
        {
            power = power + 1;
            getWorld().removeObjects(getWorld().getObjects(PowerUp1.class));

        }
        if(canSee(PowerUp2.class))
        {
            power = power + 1;
            getWorld().removeObjects(getWorld().getObjects(PowerUp2.class));

        }
        if(canSee(PowerUp3.class))
        {
            power = power + 1;
            getWorld().removeObjects(getWorld().getObjects(PowerUp3.class));

        }
        if(canSee(PowerUp4.class))
        {
            power = power + 1;
            getWorld().removeObjects(getWorld().getObjects(PowerUp4.class));

        }
        if(canSee(PowerUp5.class))
        {
            power = power + 1;
            getWorld().removeObjects(getWorld().getObjects(PowerUp5.class));

        }
        if(canSee(PowerUp6.class))
        {
            power = power + 1;
            getWorld().removeObjects(getWorld().getObjects(PowerUp6.class));

        }

    }

    public void checkPower()
    {
        if(power == 1)
        {
            PowerUp1 power1 = new PowerUp1();
            getWorld().addObject(power1, 180, 15);

        }
        else if(power == 2)
        {
            PowerUp2 power2 =  new PowerUp2();
            getWorld().addObject(power2, 198, 15);

        }
        else if(power ==3)
        {
            PowerUp3 power3 = new PowerUp3();
            getWorld().addObject(power3, 215, 15);

        }
        else if(power == 4)
        {
            PowerUp4 power4 = new PowerUp4();
            getWorld().addObject(power4, 233, 15);

        }	else if(power == 5)
        {
            PowerUp5 power5 = new PowerUp5();
            getWorld().addObject(power5, 250, 15);

        } else if(power == 6)
        {
            PowerUp6 power6 = new PowerUp6();
            getWorld().addObject(power6, 267, 15);

        }

    }
public void explosion()
    {

           
        setImage(image1);
        if(getImage() == image1)
            setImage(image2);
        else if(getImage() == image2)
            setImage(image3);
        else if(getImage() == image3)
            setImage(image4);
        else if(getImage() == image4)
            setImage(image5);
        else if(getImage() == image5)
            setImage(image6);
        else if(getImage() == image6)
            setImage(image7);
        else if(getImage() == image7)
            setImage(image8);
        else if(getImage() == image8)
            setImage(image9);
        else if(getImage() == image9)
            setImage(image10);
        else if(getImage() == image10)
            setImage(image11);
        else if(getImage() == image11)
            setImage(image12);


    }
    public void test()
    {
        if(canSee(Water.class))
        {
            explosion();
            
        }
        
        
    }

danpost danpost

2015/3/8

#
Line 317 is setting the image to 'image1' and lines 318 and 319 will change it to 'image2'. As long as your actor can see water, its image will remain at 'image2'. Remove line 317, so you are not stuck at the same image. Next, you will probably need a way to indicate that the explosion sequence has started. Add a boolean field for that -- call it 'exploding'. Then your test method would look like this:
public void test()
{
    if (exploding)
    { // continue sequence or stop
        if (canSee(Water.class)) explosion(); else exploding = false;
    }
    else if (canSee(Water.class))
    { // start sequence
        exploding = true;
        setImage(image1);
    }
}
danpost danpost

2015/3/8

#
The following might be more straight-forward:
public void test()
{
    if (!canSee(Water.class)) exploding = false; // stop or remain stopped
    else if (exploding) explosion(); // continue exploding
    else
    { // begin exploding
        exploding = true;
        setImage(image1);
    }
}
There are more replies on the next page.
1
2