添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
if( Greenfoot.isKeyDown( "z" ) ){ String answer = Greenfoot.ask( "好きな食べ物は?" ); getWorld().showText( answer, 100, 50 ); // マウスが World 外にある時は null になるので注意 MouseInfo minfo = Greenfoot.getMouseInfo(); if( minfo != null ){ // マウス座標取得 int x = minfo.getX(); int y = minfo.getY(); getWorld().showText( "x="+x+",y="+y, 100, 50 ); // マウスボタンのクリック時に押したボタン番号を取得 // クリックした時だけ数値が入る。押しっぱなしの時やボタンを離した時は 0 になるので注意 int button = minfo.getButton(); if( button != 0 ){ getWorld().showText( "button="+button, 100, 100 ); // マウスを動かした時にカーソルの下にいるアクターを取得 // マウスを動かしてない時は null になるので注意 Actor actor = minfo.getActor(); if (actor != null){ getWorld().showText( "actor="+actor.getClass().getName(), 100, 150 ); public hoge(){ img_bkup = new GreenfootImage( getImage() ); getImage().scale( width,height ); public void act() GreenfootImage img = new GreenfootImage(img_bkup); // (注意) scale で画像サイズを変更してから setImage すること img.scale( width++,height++ ); setImage(img); public hoge(){ img_bkup = new GreenfootImage( getImage() ); getImage().scale( width,height ); public void act() GreenfootImage img = new GreenfootImage(img_bkup); // (注意) setImage してから scale で画像サイズを変更すると当たり判定が変になる setImage(img); getImage().scale( width++,height++ ); public class hoge extends Actor private boolean movingleft = true; // 画像が右向きの場合は false をセット public void act() int x = getX(); int y = getY(); if( Greenfoot.isKeyDown( "left" ) ){ if( ! movingleft ){ movingleft = true; getImage().mirrorHorizontally(); setLocation( x-1,y ); if( Greenfoot.isKeyDown( "right" ) ){ if( movingleft ){ movingleft = false; getImage().mirrorHorizontally(); setLocation( x+1,y ); if( Greenfoot.isKeyDown( "up" ) ){ setLocation( x,y-1 ); if( Greenfoot.isKeyDown( "down" ) ){ setLocation( x,y+1 ); 連想配列を使って左を押すと left.png、右を押すと images フォルダ内にある right.png に切り替える例 この例ではクラス名を hoge としているので適宜変更する import java.util.HashMap; public class hoge extends Actor private HashMap<String,GreenfootImage> imgmap = new HashMap<String,GreenfootImage>(); public hoge() imgmap.put("left",new GreenfootImage( "images/left.png" )); imgmap.put("right",new GreenfootImage( "images/right.png" )); public void act() if( Greenfoot.isKeyDown( "left" ) ){ setImage(imgmap.get("left")); else if( Greenfoot.isKeyDown( "right" ) ){ setImage(imgmap.get("right")); if( Greenfoot.isKeyDown( "space" ) ){ World game = new WorldGame(); Greenfoot.setWorld( game ); 左キーを押したら images フォルダ内にある img1.png を座標(100,100)に、 img2.png を座標(200,200)に描画する例 public class MyWorld extends World public MyWorld() super(600, 400, 1); public void act() if( Greenfoot.isKeyDown( "left" ) ){ GreenfootImage img1 = new GreenfootImage( "images/img1.png" ); GreenfootImage img2 = new GreenfootImage( "images/img2.png" ); getBackground().drawImage( img1, 100, 100 ); getBackground().drawImage( img2, 200, 200 ); super(800, 450, 1); // 画像サイズをセットする back = new GreenfootImage( "./images/back.jpeg" ); back_flop = new GreenfootImage( "./images/back_flop.jpeg" ); back_width = back.getWidth(); public void act() back_x += back_dx; if( back_x > 0){ back_x -= back_width; flop = !flop; if( back_x < -back_width ){ back_x += back_width; flop = !flop; getBackground().drawImage( flop ? back_flop : back, back_x, 0 ); getBackground().drawImage( flop ? back : back_flop, back_x+back_width, 0 ); showText( "back_x : "+ back_x, 100, 10 ); if( Greenfoot.isKeyDown( "space" ) ){ // スペースで MyWorld2 表示 World world2 = new MyWorld2(); Greenfoot.setWorld( world2 ); // MyWorld で定義されているカウンタを利用 MyWorld.counter++; showText( "counter = " + MyWorld.counter, 100, 50 ); if( Greenfoot.isKeyDown( "space" ) ){ getWorld().addObject( new TAMA(), getX(), getY() ); if( Greenfoot.isKeyDown( "space" ) ){ if( flag_tama == false ){ getWorld().addObject( new TAMA(), getX(), getY() ); flag_tama = true; else flag_tama = false; if( Greenfoot.isKeyDown( "space" ) ){ if( flag_tama == 0 ){ getWorld().addObject( new TAMA(), getX(), getY() ); flag_tama = 50; // 数字を変えると発射間隔が変わる A. まず sounds フォルダの中に音声ファイルを入れます。 音声ファイルの形式は wav や MP3(※) 等です ※ greenfoot のバージョンが古いと MP3を再生出来ない場合があります それからコンストラクタの中で GreenfootSound クラスからそのファイルを読み込み、started メソッドで playLoop メソッドを、 stopped メソッドで stop メソッドを呼び出します。 MyWorld と MyWorld2 があって、Hoge というキャラクタが space キーを押すとワールドとBGM(test.mp3 → test2.mp3)を切り替える例 ・ MyWorld クラス public class MyWorld extends World GreenfootSound bgm = null; public MyWorld() super(600, 400, 1); bgm = new GreenfootSound( "test.mp3" ); public void started() bgm.playLoop(); public void stopped() bgm.stop(); ・ MyWorld2 クラス public class MyWorld2 extends World GreenfootSound bgm = null; public MyWorld2() super(600, 400, 1); bgm = new GreenfootSound( "test2.mp3" ); public void started() bgm.playLoop(); public void stopped() bgm.stop(); ・ Hoge クラス public class Hoge extends Actor public void act() if( Greenfoot.isKeyDown( "space" ) ){ getWorld().stopped(); World world = new MyWorld2(); Greenfoot.setWorld( world ); world.started(); A. タイトルロゴを Actor クラスのサブクラスとして作っておき、 World のフィールドで定義します。 それから World のコンストラクタで addObject() して表示しておき、run を押したら act() の中で一回だけ removeObject() を呼び出して消します。 例えば下の様にします。 import greenfoot.core.TextLabel; import greenfoot.WorldVisitor; import greenfoot.util.GraphicsUtilities; import java.util.ArrayList; import java.awt.Graphics2D; public class MyWorld extends World // Reffered from core/TextLabel.java // Licence: GPL2 class TextLabelEx extends TextLabel boolean enable; int xpos; int ypos; int size; boolean bold; greenfoot.Color gfcolor; java.awt.Color color; String text; String[] lines; private GraphicsUtilities.MultiLineStringDimensions dimensions = null; @Override public int getX(){ return xpos;} @Override public int getY(){ return ypos;} @Override public String getText(){ return text;} public TextLabelEx(String _text, int _xpos, int _ypos, int _size, boolean _bold, greenfoot.Color _gfcolor ) super("", 0, 0 ); lines = new String[1]; xpos = _xpos; ypos = _ypos; reset( _text, _size, _bold, _gfcolor ); public void reset( String _text, int _size, boolean _bold, greenfoot.Color _gfcolor ) if( text == _text && size == _size && bold == _bold && gfcolor == _gfcolor ) return; text = _text; size = _size; bold = _bold; gfcolor = _gfcolor; lines[0] = text; dimensions = null; if( text.length() == 0 ) enable = false; else enable = true; @Override public void draw(Graphics2D g, int cellsize) if( !enable ) return; if(dimensions == null) { dimensions = GraphicsUtilities.getMultiLineStringDimensions(lines, bold ? java.awt.Font.BOLD : java.awt.Font.PLAIN, size); color = new java.awt.Color( gfcolor.getRed(), gfcolor.getGreen(), gfcolor.getBlue(), gfcolor.getAlpha() ); int ydraw = ypos * cellsize - dimensions.getHeight() / 2 + cellsize / 2; int xdraw = xpos * cellsize - dimensions.getWidth() / 2 + cellsize / 2; g.translate(xdraw, ydraw); GraphicsUtilities.drawOutlinedText(g, dimensions, color, java.awt.Color.BLACK); g.translate(-xdraw, -ydraw); public void showTextEx(String text, int x, int y, int size, boolean bold, greenfoot.Color color ) for( TextLabel label : WorldVisitor.getTextLabels(this) ){ if( label.getX() == x && label.getY() == y ){ if( label instanceof TextLabelEx ){ ((TextLabelEx)label).reset(text, size, bold, color); return; WorldVisitor.getTextLabels(this).add(new TextLabelEx( text, x, y, size, bold, color ) ); //showText( "labels: "+WorldVisitor.getTextLabels(this).size(), 80, 20 ); public MyWorld() super(600, 400, 1); ((MyWorld)getWorld()).showTextEx( 文字列, x 座標, y 座標, サイズ, 太字(true か false ), 色 ); ※ 色は マニュアル の Color のページを参考 使用例: ((MyWorld)getWorld()).showTextEx("hoge", 200, 200, 64, false, Color.RED );