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

2020/1/14

Image won't show in the world

LightningFast LightningFast

2020/1/14

#
I was working on the powerbar thing again (recap: a bar where its height depends on the score and if no spacebar is hit, the score decreases) and it just won't show up in the world :(
danpost danpost

2020/1/14

#
LightningFast wrote...
I was working on the powerbar thing again (recap: a bar where its height depends on the score and if no spacebar is hit, the score decreases) and it just won't show up in the world :(
Codes, please.
LightningFast LightningFast

2020/1/14

#
Power Bar Actor: import greenfoot.*; public class PowerBar extends Actor { //int power = 0; int powerBarWidth = 50; int powerBarHeight = 300; //int pixelsPerPowerPoint = (int)powerBarHeight/power; public void act() { //b.setImage(bar); //getWorld().addObject(b,900,50); } } PowerBar subclass #1: import greenfoot.*; public class Bar extends PowerBar { public Bar() { GreenfootImage bar = new GreenfootImage(powerBarWidth, powerBarHeight); bar.setColor(Color.WHITE); setImage(bar); bar.fill(); } public void act() { } } PowerBar subclass #2: import greenfoot.*; public class Bar extends PowerBar { public Bar() { GreenfootImage bar = new GreenfootImage(powerBarWidth, powerBarHeight); bar.setColor(Color.WHITE); setImage(bar); bar.fill(); } public void act() { } } hero: import greenfoot.*; public class Hero extends Actor { GreenfootSound booSound = new GreenfootSound("Boo.wav"); int powerAdd = 0; public void act() { checkKeys(); checkCollision(); } public void checkKeys() { int x = getX(); if (Greenfoot.isKeyDown("space")) { powerAdd = 0; booSound.play(); powerAdd = 10; PowerBar p = new Power(powerAdd); } if (Greenfoot.isKeyDown("left")) x=x-4; if (Greenfoot.isKeyDown("right")) x=x+4; setLocation(x,getY()); } public void checkCollision() { boolean collision = this.isTouching(Pie.class); if (collision == true) { powerAdd = 0; removeTouching(Pie.class); powerAdd = -30; PowerBar p = new Power(powerAdd); } } }
LightningFast LightningFast

2020/1/14

#
so I was working on it a little before seeing the reply and I may have made a few changes... feel free to ask!
danpost danpost

2020/1/14

#
LightningFast wrote...
so I was working on it a little before seeing the reply and I may have made a few changes... feel free to ask!
First, remove the act method (thou empty) from both PowerBar subclasses. Then, you cannot have two subclasses with the same name extending from the same class. Finally, show all codes in other classes that deal with PowerBar (or Bar) objects.
LightningFast LightningFast

2020/1/15

#
Oh I apologize... I copied the same code for subclass #1 as subclass #2! They both have an act method so yes I will take those out. I'll recopy the codes I have... Hero class: import greenfoot.*; public class Hero extends Actor { GreenfootSound booSound = new GreenfootSound("Boo.wav"); int powerAdd = 0; public void act() { checkKeys(); checkCollision(); } public void checkKeys() { int x = getX(); if (Greenfoot.isKeyDown("space")) { powerAdd = 0; booSound.play(); powerAdd = 10; PowerBar p = new Power(powerAdd); } if (Greenfoot.isKeyDown("left")) x=x-4; if (Greenfoot.isKeyDown("right")) x=x+4; setLocation(x,getY()); } public void checkCollision() { boolean collision = this.isTouching(Pie.class); if (collision == true) { powerAdd = 0; removeTouching(Pie.class); powerAdd = -30; PowerBar p = new Power(powerAdd); } } } PowerBar class: import greenfoot.*; public class PowerBar extends Actor { //int power = 0; int powerBarWidth = 50; int powerBarHeight = 300; //int pixelsPerPowerPoint = (int)powerBarHeight/power; public void act() { } } PowerBar subclass #1 (bar): import greenfoot.*; public class Bar extends PowerBar { public Bar() { GreenfootImage bar = new GreenfootImage(powerBarWidth, powerBarHeight); bar.setColor(Color.WHITE); setImage(bar); bar.fill(); } public void act() { } } PowerBar subclass #2 (Power-score essentialy): import greenfoot.*; public class Power extends PowerBar { int powerAdd; int powerHeight=10; public Power(int powerAdd){ this.powerAdd = powerAdd; } public void act() { powerHeight+=powerAdd; if (powerHeight<0) powerHeight=10; GreenfootImage power = new GreenfootImage(powerBarWidth, powerHeight); int weak = (powerBarHeight/3); int mid = (2*(powerBarHeight/3)); int strong = (3*(powerBarHeight/3)); if (powerHeight <= weak) power.setColor(Color.RED); if (weak < powerHeight && powerHeight <= mid) power.setColor(Color.YELLOW); if (mid < powerHeight && powerHeight <= strong) power.setColor(Color.GREEN); setImage(power); } }
LightningFast LightningFast

2020/1/15

#
ok that was stupid... I forgot I have a lot of stuff in the PowerBar subclass #2. So is that where the problem is? Because the white bar (Bar - PowerBar subclass #1) shows up fine but Power just has a greenfoot icon for it. That actually makes sense since I need to set the image in the constructor!!!!! Let me try that and I'll update on any other errors I may encounter...
LightningFast LightningFast

2020/1/15

#
UPDATE: image is now showing but I've tried whatever I could but cannot get the size of it to change :( Here is the code I have so far... World: import greenfoot.*; public class Boss1 extends World { Reka r = new Reka(); Hero h = new Hero(); int ps; Pie p = new Pie(); Bar b = new Bar(); Power pb = new Power(10,0); public Boss1() { super(1000,540, 1, false); addObject(r, 500,50); addObject(h, 500,500); addObject(p, 475,50); addObject(b,900,350); addObject(pb,900,350); } } Hero: import greenfoot.*; public class Hero extends Actor { GreenfootSound booSound = new GreenfootSound("Boo.wav"); int powerAdd = 0; int powerSub = 0; public void act() { checkKeys(); checkCollision(); } public void checkKeys() { int x = getX(); if (Greenfoot.isKeyDown("space")) { //powerAdd = 0; booSound.play(); powerAdd = 50; PowerBar p = new Power(powerAdd,0); } if (Greenfoot.isKeyDown("left")) x=x-5; if (Greenfoot.isKeyDown("right")) x=x+5; setLocation(x,getY()); } public void checkCollision() { boolean collision = this.isTouching(Pie.class); if (collision == true) { //powerSub = 0; removeTouching(Pie.class); powerSub = -30; PowerBar p = new Power(0,powerSub); } } } PowerBar: import greenfoot.*; public class PowerBar extends Actor { //int power = 0; int powerBarWidth = 50; int powerBarHeight = 300; //int pixelsPerPowerPoint = (int)powerBarHeight/power; public void act() { } } PowerBar subclass #1 (bar): import greenfoot.*; public class Bar extends PowerBar { public Bar() { GreenfootImage bar = new GreenfootImage(powerBarWidth, powerBarHeight); bar.setColor(Color.WHITE); setImage(bar); bar.fill(); } } PowerBar subclass #2 (Power-score essentialy): import greenfoot.*; public class Power extends PowerBar { int add; int sub; int powerHeight=10; public Power(int powerAdd, int powerSub){ this.add = powerAdd; this.sub = powerSub; powerHeight = powerHeight + add + sub; if (powerHeight<0) powerHeight=10; GreenfootImage power = new GreenfootImage(powerBarWidth, powerHeight); int weak = (powerBarHeight/3); int mid = (2*(powerBarHeight/3)); int strong = (3*(powerBarHeight/3)); if (powerHeight <= weak) power.setColor(Color.RED); if (weak < powerHeight && powerHeight <= mid) power.setColor(Color.YELLOW); if (mid < powerHeight && powerHeight <= strong) power.setColor(Color.GREEN); //power.fill(); setImage(power); power.fill(); } } These are all the classes that deal with the PowerBar Method
danpost danpost

2020/1/15

#
All I see are constructor in the subclasses. There is nothing to suggest any value changing. I do not even see an active value field in them.
You need to login to post a reply.