PIZiadas گرافیک

PIZiadas گرافیک

دنیای من شوید.

برنامه نویسی گرافیکی: انیمیشن موتور [جاوا]

motor_animaciónپس از تعریف اول رابط به رسم اشیاء گرافیکی به جاوا, ما پیاده سازی خواهد شد انیمیشن موتور که اجازه می دهد تا ما را به مدیریت پویایی و کاربردی, بعد, تعامل با کاربر اضافه.

این موتور مسئول فراخوانی توابع است که هر یک از اشیاء گرافیکی از پایگاه داده را تشویق است.

Un موتور بازی یک مدت با اشاره به یک سری از روال برنامه نویسی اجازه طرح, ایجاد و ارائه بازی های ویدئویی.

به طور مشابه، موتورهای بازی است که در هر دو کنسول های بازی و عمل وجود دارد OS. از قابلیت های اساسی یک موتور بازی است که برای یک موتور رندر برای 2D و3D, موتور فیزیک آشکارساز برخورد, برای تلفن های موبایل, برنامه نویسی, انیمیشن, هوش مصنوعی, شبکه, جریان, مدیریت حافظه، و یک نمودار صحنه.(W).

پیاده سازی موتور ما برای اولین بار بر روی قابلیت تکیه ما در حال حاضر در کلاس مسئول برای ذخیره سازی و نمایندگی دارند: “تخته سیاه“. تعریف رابط کاربری جدید برای اضافه کردن قابلیت های جدید, ممکن تحریک و تشجیع کردن یک شی.

رابط Animable

جدید “رابط” اعلام یک روش واحد است که کلاس هایی است که پیاده سازی ترکیب.

بسته گراف;

عمومی رابط Animable {
	عمومی از درجه اعتبار ساقط روح();
}

مثلا, podemos modificar una de nuestras clases gráficas para que se anime, o crear una nueva que extienda la funcionalidad de otra, como es el caso de la nueva clase Point2DAnimable که extiende la clase Point2D para almacenar coordenadas, و implementa el interface Animable con la función anima que simplemente modifica aleatoriamente las coordenadas almacenadas.

بسته گراف;

کلاس های عمومی Point2DAnimable گسترش Point2D implements Animable{
	عمومی Point2DAnimable(INT X, INT و){
		super(X,و);
	}
	از درجه اعتبار ساقط عمومی روح() {
		x =(INT)(Math.random()*5);
		x-=(INT)(Math.random()*5);
		y =(INT)(Math.random()*5);
		y-=(INT)(Math.random()*5);
	}
}

Añadiremos los nuevos objetos al sistema de almacenamiento de la clase Blackboard desde el applett principal

	private void iniciarElementos() {
		pizarra.addElement(new Point2DAnimable(50,50));
		pizarra.addElement(new Point2D(70,50));
		pizarra.addElement(new Point2D(50,70));
	}

Para animar los objetos de la base de datos, implementaremos un nuevo método en la clase Blackboard que se encargará de analizar si son animables, en cuyo caso llamará a la función anima propia de cada objeto

	از درجه اعتبار ساقط عمومی آنیما(){
		شمارش شمارشی = bd.elements();
		OB شی;
		در حین(enum.hasMoreElements()){
			OB = enum.nextElement();
			اگر(OB instanceof Animable){
				((Animable) چه).روح();
			}
		}

	}

موتور انیمیشن

فرآیند مدیریت به روز رسانی انیمیشن چیزی است که ما موتور انیمیشن تماس بگیرید (ساخته شده به عنوان یک موضوع و یا “نخ“). مسئولیت شما این است برای تماس با روش انیمیشن ما در کلاس اجرا تخته سیاه.

به OS, un موضوع اعدام, رشته و یا موضوع کوچکترین واحد پردازش است که می توان با یک سیستم عامل برنامه ریزی شده است.

موضوع (نخ) یکی از ویژگی های است که اجازه می دهد تا یک برنامه برای انجام وظایف چندگانه در یک بار است (concurrentemente). موضوعات مختلف به اشتراک گذاشتن یک تعدادی از منابع مانند فضای حافظه, فایل های باز, وضعیت احراز هویت, غیره. Esta técnica permite simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente.

Un hilo es básicamente una tarea que puede ser ejecutada en paralelo con otra tarea.(W)

Nuestro motor de animación implementará la clase “Runnable” para disponer de métodos de inicio y parada.

بسته گراف;

کلاس های عمومی MotorGrafico implements Runnable {
long interval = 100;

Dispondremos de una serie de variables de control de tipo booleano para poder pausar la animación.

boolean parar = false;
public void parar() { parar = true; }

boolean pausado = false;
void pausar() { pausado = !pausado; }

El constructor de la clase recibirá un objeto “تخته سیاه” como parámetro. Servirá para saber qué elemento tiene la función de animación principal. Este objeto lo almacenaremos en una variable para referenciarlo posteriormente.

private گراف تخته سیاه;
عمومی MotorGrafico(گراف تخته سیاه) {
	این.گراف گراف =;
}

قبل از شروع موضوع اعدام ما باید اطمینان حاصل شود که غیر فعال است, که در این صورت ما از بین بردن هر چیزی بیش از یک پروسه ها اجرا نمی در یک زمان.

private فرار فلاشر موضوع;
از درجه اعتبار ساقط عمومی شروع() {
	اگر(شاخص!=صفر){
		= چشمک زنصفر;
	}
	= چشمک زن جدید نخ(این);
	blinker.start();
}

برای متوقف کردن موتور انیمیشن نابود کردن موضوع اعدام, به سادگی اختصاص دادن مقدار صفر به متغیر است که کنترل “نخ”.

عمومی از درجه اعتبار ساقط توقف() {
	= چشمک زن صفر;
}

فرایند اصلی این است که در تابع انجام “دویدن()”.

ابتدا از ما نمی خواهیم برای متوقف کردن اجرای برنامه, و کنترل کنید که موضوع اعدام مناسب است. اگر این چنین است, تعلیق برنامه میلی ثانیه اعدام با تماس به “خواب” و, برای از سرگیری, فراخوانی متد از انیمیشن. عناصر گرافیکی یک بار متحرک عقب را به منظور جلب (به تصویر کشند)

از درجه اعتبار ساقط عمومی دویدن() {
	نخ thisThread = نخ.currentThread();

	در حین (!توقف && شاخص == thisThread) {
		امتحان {
			thisThread.sleep(فاصله);
		}  گرفتن (InterruptedException الکترونیکی) {}

		اگر (شمار != صفر && !pausado) {
			تحریک و تشجیع کردن();
			graf.repaint();
		}
	}
}

تابع “تحریک و تشجیع کردن” آن را فراخوانی تابع “روح()” کلاس “تخته سیاه”, مسئول برای ذخیره سازی پایگاه داده نمودار.

	از درجه اعتبار ساقط خصوصی تحریک و تشجیع کردن() {
		graf.anima();
	}
}

اجرای برنامه

کلاس نمونه باید از اعلام یک شی شامل “MotorGrafico” که پارامتر عبور برای قرار دادن صفحه نمایش گرافیکی و یا “تخته سیاه”.

کلاس های عمومی Example1 گسترش اپلت {
	تخته سنگ تخته سیاه =جدید تخته سیاه();
	MotorGrafico موتور =جدید MotorGrafico(تخته سیاه);

همچنین, ما موتور انیمیشن با تماس با روش خود شروع “شروع()”

	عمومی Example1() می اندازد HeadlessException {
		این.setLayout(جدید GridLayout());
		این.اضافه کردن(تخته سیاه);
		iniciarElementos();
		motor.start();
	}

ما فقط می توانیم برخی از اقلام به پایگاه داده های تصویر animatable اضافه به تکمیل ورزش. ما خواهیم دید که برخی از نقاط حرکت نمی کند, در حالی که اجرای رابط “Animable” اگر این کار را به صورت تصادفی.

	private از درجه اعتبار ساقط iniciarElementos() {
		pizarra.addElement(جدید Point2DAnimable(50,50));
		pizarra.addElement(جدید Point2DAnimable(60,50));
		pizarra.addElement(جدید Point2DAnimable(50,80));
		pizarra.addElement(جدید Point2DAnimable(50,70));
		pizarra.addElement(جدید Point2D(70,50));
		pizarra.addElement(جدید Point2D(50,70));
	}
JAVA

دوره جاوا