Hello, I'm trying to recreate the first stage from Super Mario Bros. and utilized danpost's scroller code, but if I keep the entire world unbounded, Mario eventually and infinitely falls through the bricks he's supposed to stand on.
Here is the code of my World.
import java.util.*;
import greenfoot.*;
/**
*
*/
public class World1 extends World
{
public static final int WIDE = 800;
public static final int HIGH = 240;
Scroller scroller;
Actor scrollActor;
/**
* Constructor for objects of class MyWorld.
*/
public World1()
{
super(WIDE, HIGH, 1, false);
GreenfootImage bg = new GreenfootImage("world_1_1BG.png");
int bgWide = bg.getWidth();
int bgHigh = bg.getHeight();
scroller = new Scroller(this, null, 3584, 240);
scrollActor = new Mario();
addObject(scrollActor, 8, 200);
setPaintOrder(Mario.class, TallMountain.class);
setPaintOrder(Mario.class, Brick.class);
scroll();
for(int i = 8; i < 1120; i += 16)
{
Brick brick = new Brick();
Brick brick2 = new Brick();
addObject(brick, i, 216);
addObject(brick2, i, 232);
}
for(int i = 1160; i < 1392; i += 16)
{
Brick brick = new Brick();
Brick brick2 = new Brick();
addObject(brick, i, 216);
addObject(brick2, i, 232);
}
for(int i = 1448; i < 2456; i += 16)
{
Brick brick = new Brick();
Brick brick2 = new Brick();
addObject(brick, i, 216);
addObject(brick2, i, 232);
}
for(int i = 2488; i < 3584; i += 16)
{
Brick brick = new Brick();
Brick brick2 = new Brick();
addObject(brick, i, 216);
addObject(brick2, i, 232);
}
TallMountain tm = new TallMountain();
TallMountain tm2 = new TallMountain();
TallMountain tm3 = new TallMountain();
TallMountain tm4 = new TallMountain();
TallMountain tm5 = new TallMountain();
addObject(tm, 40, 190);
addObject(tm2, 808, 190);
addObject(tm3, 1576, 190);
addObject(tm4, 2344, 190);
addObject(tm5, 3112, 190);
SmallPipe sp = new SmallPipe();
addObject(sp, 460, 192);
MediumPipe mp = new MediumPipe();
addObject(mp, 624, 184);
LargePipe lp = new LargePipe();
LargePipe lp2 = new LargePipe();
addObject(lp, 750, 176);
addObject(lp2, 926, 176);
for(int i = 2152; i <= 2200; i+=16)
{
Block block = new Block();
addObject(block, i, 200);
}
for(int i = 2168; i<= 2200; i+=16)
{
Block block = new Block();
addObject(block, i, 184);
}
for(int i = 2184; i<= 2200; i+=16)
{
Block block = new Block();
addObject(block, i, 168);
}
for(int i = 2200; i<= 2200; i+=16)
{
Block block = new Block();
addObject(block, i, 152);
}
for(int i = 2248; i <= 2296; i+=16)
{
Block block = new Block();
addObject(block, i, 200);
}
for(int i = 2248; i<= 2280; i+=16)
{
Block block = new Block();
addObject(block, i, 184);
}
for(int i = 2248; i<= 2264; i+=16)
{
Block block = new Block();
addObject(block, i, 168);
}
for(int i = 2248; i<= 2248; i+=16)
{
Block block = new Block();
addObject(block, i, 152);
}
for(int i = 2376; i <= 2440; i+=16)
{
Block block = new Block();
addObject(block, i, 200);
}
for(int i = 2392; i<= 2440; i+=16)
{
Block block = new Block();
addObject(block, i, 184);
}
for(int i = 2408; i<= 2440; i+=16)
{
Block block = new Block();
addObject(block, i, 168);
}
for(int i = 2424; i<= 2440; i+=16)
{
Block block = new Block();
addObject(block, i, 152);
}
for(int i = 2488; i <= 2536; i+=16)
{
Block block = new Block();
addObject(block, i, 200);
}
for(int i = 2488; i<= 2520; i+=16)
{
Block block = new Block();
addObject(block, i, 184);
}
for(int i = 2488; i<= 2504; i+=16)
{
Block block = new Block();
addObject(block, i, 168);
}
for(int i = 2488; i<= 2488; i+=16)
{
Block block = new Block();
addObject(block, i, 152);
}
for(int i = 2904; i <= 3032; i+=16)
{
Block block = new Block();
addObject(block, i, 200);
}
for(int i = 2920; i<= 3032; i+=16)
{
Block block = new Block();
addObject(block, i, 184);
}
for(int i = 2936; i<= 3032; i+=16)
{
Block block = new Block();
addObject(block, i, 168);
}
for(int i = 2952; i<= 3032; i+=16)
{
Block block = new Block();
addObject(block, i, 152);
}
for(int i = 2968; i <= 3032; i+=16)
{
Block block = new Block();
addObject(block, i, 136);
}
for(int i = 2984; i<= 3032; i+=16)
{
Block block = new Block();
addObject(block, i, 120);
}
for(int i = 3000; i<= 3032; i+=16)
{
Block block = new Block();
addObject(block, i, 104);
}
for(int i = 3016; i<= 3032; i+=16)
{
Block block = new Block();
addObject(block, i, 88);
}
Castle cas = new Castle();
addObject(cas, 3272, 168);
Block blo = new Block();
addObject(blo, 3176, 200);
for(int i = 56; i<200; i+=16)
{
flagpolepiece fla = new flagpolepiece();
addObject(fla, 3176, i);
}
flagpoledot fpd = new flagpoledot();
addObject(fpd, 3176, 46);
flag flag = new flag();
addObject(flag, 3170, 88);
}
public void act()
{
if(scrollActor != null) scroll();
setPaintOrder(Mario.class, World1.class);
}
private void scroll()
{
int dsx = scrollActor.getX()-WIDE/2;
int dsy = scrollActor.getY()-HIGH/2;
scroller.scroll(dsx, dsy);
}
}

