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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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:
1
2
3
4
5
6
7
8
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:
1
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:
1
2
3
4
5
6
7
8
// 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:
1
2
3
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?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
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:
1
2
3
4
5
6
7
8
9
10
11
12
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:
1
2
3
4
5
6
7
8
9
10
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