|
Вступление Примеры Словарь Вопросы Sun Microsystems |
Примеры программирования на Java
import java.applet.*;
import java.awt.*;
//========================================
class Coordinate
// Для начала в программе объявляется новый класс Coordinate,
// который содержит координаты x и y. Используя обьекты класса Coordinate,
// можно хранить координаты объекта. Функция-конструктор класса использует
// значения его параметров для ввода переменных координат:
{
public int x;
public int y;
public Coordinate(int x, int y)
{
// Параметры функции-конструктора тоже называются х и у, как и переменные-
// члены класса. Для различия между ними используется ключевое слово this.
// Функцию-конструктор можно было бы описать и так:
// public Coordinate(int a, int b)
// {
// x = a;
// y = b;
// }
this.x = x;
this.y = y;
}
}
//============================================
public class space extends Applet
{
Graphics g;
Image background; // Здесь будет храниться картинка фона
Image home; // В этой переменной будет содержаться движущейся объект
Coordinate coordinate;
boolean done_loading = false;
int width; // Данные переменные хранят ширину и
int height;// высоту фонового изображения
int X;
int Y;
//=====================================================================
public void init()
{
g = getGraphics();
// Получение изображения для фона и объекта из файлов
background = getImage(getCodeBase(), "sat.jpg");
home = getImage(getCodeBase(), "mir.gif");
width = size().width;
height = size().height;
get_coordinate();
// Создается изображение вне экрана ( createImage), а
// затем выводится на экран функцией drawImage.
Image offScrImage = createImage(width, height);
Graphics offScrGC = offScrImage.getGraphics();
offScrGC.drawImage(background, 0, 0, width, height, this);
}
//========================================================
// Обработка событий нажатия клавиши
public boolean keyDown(Event evt, int key)
{
// Реакция на нажатие стрелок на клавиатуре
switch(key)
{
case Event.UP:
move_s(-1, 0);
break;
case Event.DOWN:
move_s(1, 0);
break;
case Event.LEFT:
move_s(0, -1);
break;
case Event.RIGHT:
move_s(0, 1);
break;
}
return true;
}
//==========================================================
void get_coordinate()
{
// Начальное положение объекта
coordinate = new Coordinate(100, 100);
}
//========================================================
public void move_s(int dy, int dx)
{
//dx и dy -- приращение координат. Они могут принимать значения -1, 0, 1
int old_x = coordinate.x; //Сохранение координат предыдущего (" старого")
int old_y = coordinate.y; // местоположения
int new_x = old_x + dx; // Вычисление "новых" координат
int new_y = old_y + dy;
// При удалении объекта необходимо восстановить "старое" фоновое
// изображение. Для этого достаточно перерисовать только
// невидимую часть. Для этого создается копия графического
// контекста g2.
Graphics g2;
g2 = g.create();
// Затем clipRect создает прямоугольник отсечения ( там где раньше
// было изображение объекта )
g2.clipRect(old_x, old_y, home.getWidth(this), home.getHeight(this));
// Если "новое" изображение объекта попадает полностью в границы
// апплета, то новые координаты становятся текущими. Затем восстанавливается
// фоновое изображение и выводится объект уже в новом месте с координатами
// new_x и new_y
if ( ((new_x > 0) & (new_x < (width - home.getWidth(this )))) & ((new_y > 0) & (new_y < (height - home.getHeight(this)))))
{
coordinate.x = new_x;
coordinate.y = new_y;
g2.drawImage(background, 0, 0, null);
g.drawImage(home, new_x, new_y, this);
}
}
//=====================================================================
public boolean mouseDown(Event evt, int x, int y)
// Если указатель мыши помещается в область апплета,
// и нажимается любая клавиша мыши,
// то таким образом задается направление движения объекта
{
X = x;
Y = y;
if ( x <= coordinate.x)
{
for ( int i=0; i < ( coordinate.x - x); i++)
{
if ( y <= coordinate.y)
move_s ( -1, -1);
else
move_s ( 1, -1);
}
}
else
{
for ( int i=0; i < (x - coordinate.x); i++)
{
if ( y <= coordinate.y)
move_s ( -1, 1);
else
move_s ( 1, 1);
}
}
return true;
}
//======================================================================
//======================================================================
public boolean imageUpdate ( Image img, int infoflags, int x, int y,
int w, int h)
{
// Пока фоновое изображение загружается, параметр
// infoflags не равен ALLBITS. Переменная done_loading
// равна false, и в строке статуса Вы видите Loading
if (infoflags == ALLBITS)
{
done_loading = true;
repaint();
return false;
}
else
return true;
}
//======================================================
public void paint (Graphics _g)
{
if (!done_loading) // Пока изображение загружается
showStatus ("Loading");
else
{
showStatus ("OK");
g.drawImage (background, 0, 0, this);
g.drawImage (home, coordinate.x, coordinate.y, this);
}
}
//==============================================
}
|
||