Greenfoot の最終クラスのプロジェクトとして、"Doggie the Super Catcher" というゲームを作ることにしました。このゲームが基本的に行うことは、俳優の犬が画面を前後に走って木から落ちてくるクローバーや特別なおやつをキャッチするために最善を尽くすことです (ユーザーの左右の矢印キー入力を介して)。もちろん)。ただし、問題は、複数のレベルを作成したいということであり、最初の世界 (GameWorld という名前) 用に持っているものを、別の世界にあるレベル 1 に表示したいということです。どうすればいいですか?つまり、特定の条件が満たされた場合 (つまり、特定のポイント数に達した場合)、クローバー、キャンディー、およびスコアボードを含む同じものを GameWorld から Level1 に転送できないようです? 参考までに:私は スコア ボードに別のアクターを使用しました (これが役に立てば幸いです...)。どなたか方法をご存知ありませんか?ありがとう。
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
public class Doggie extends Actor
{
// Declare arrays of Greenfoot images for animation
private GreenfootImage[] runningLeft;
private GreenfootImage[] runningRight;
// Declare Greenfoot images for standing still facing left and right
private GreenfootImage standingStill;
private GreenfootImage standingLeft;
private GreenfootImage standingRight;
//
boolean facingLeft;
// Integers that help control the speed of movement and animation
private int animationCounter;
private int animationDelay;
private int animationDelayCounter;
private int animationSpeed;
Clover c;
SpecialTreat1 c1;
SpecialTreat2 c2;
public Doggie()
{
String fileName;
String fileNamePrefix = "left0";
String fileNameSuffix = ".png";
runningLeft = new GreenfootImage[3];
runningRight = new GreenfootImage[3];
for (int imageCounter = 0; imageCounter < runningLeft.length; imageCounter++)
{
fileName = fileNamePrefix + (imageCounter + 1) + fileNameSuffix;
runningLeft[imageCounter] = new GreenfootImage(fileName);
runningRight[imageCounter] = new GreenfootImage (runningLeft[imageCounter]);
runningRight[imageCounter].mirrorHorizontally();
}
standingStill = new GreenfootImage ("still01.png");
standingLeft = new GreenfootImage ("left01.png");
standingRight = new GreenfootImage (standingLeft);
standingRight.mirrorHorizontally();
facingLeft = true;
animationSpeed = 5;
animationDelay = 6;
animationDelayCounter = 0;
animationCounter = 0;
}
/**
* Act - do whatever the Doggie wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public void act()
{
animationDelayCounter++;
if (animationDelayCounter == animationDelay)
{
animationCounter++;
animationDelayCounter = 0;
}
if (animationCounter > runningRight.length - 1)
animationCounter = 0;
c = (Clover)getOneIntersectingObject(Clover.class);
c1 = (SpecialTreat1)getOneIntersectingObject(SpecialTreat1.class);
c2 = (SpecialTreat2)getOneIntersectingObject(SpecialTreat2.class);
if (c != null)
{
c.collect();
GameWorld gW = (GameWorld)getWorld();
gW.showPoints();
}
if (c1 != null)
{
c1.collect();
GameWorld gW = (GameWorld)getWorld();
gW.showPoints();
}
if (c2 != null)
{
c2.collect();
GameWorld gW = (GameWorld)getWorld();
gW.showPoints();
}
}
public void runLeft()
{
if (!(facingLeft))
animationCounter = 0;
facingLeft = true;
setImage (runningLeft[animationCounter]);
setLocation (getX() - animationSpeed, getY());
}
public void runRight()
{
if (facingLeft)
animationCounter = 0;
facingLeft = false;
setImage (runningRight[animationCounter]);
setLocation (getX() + animationSpeed, getY());
}
public void standStill()
{
if (facingLeft)
{
setImage(standingLeft);
}
else
setImage(standingRight);
animationCounter = 0;
animationDelayCounter = 0;
}
}