📄 ballbewegungdeu.html
字号:
<html><!-- InstanceBegin template="/Templates/template.dwt" codeOutsideHTMLIsLocked="false" -->
<head>
<!-- InstanceBeginEditable name="doctitle" -->
<title>Java Cooperation: how to move a ball</title>
<!-- InstanceEndEditable --><meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link href="jc_style.css" rel="stylesheet" type="text/css">
<script src="klayers.js"></script>
<script>
function cancelCloseMenu(){
if(self.tm) clearTimeout(tm) // cancel delayed closing
}
function showMenu(){
if(!self.menu || !self.submenu){
menu=layer("menulayer")
submenu=layer("submenulayer")
}
cancelCloseMenu()
submenu.moveTo(menu.getAbsoluteLeft(), menu.getAbsoluteTop() + menu.getHeight()) // move second menu relatively
submenu.show()
}
function initiateHideMenu(){
tm=setTimeout("hideMenu()",400) // 1 second delay to close a submenu
}
function hideMenu(){
submenu.hide()
}
</script>
<!-- InstanceBeginEditable name="head" --><!-- InstanceEndEditable -->
</head>
<body bgcolor="#ffffff" leftmargin="0" topmargin="0" rightmargin="0" bottommargin="0">
<div align="center">
<a name="top"></a>
<table bgcolor="#737373" border="0" cellpadding="0" cellspacing="0" width="618">
<tr>
<td rowspan="8" bgcolor="#000000"><img src="Pics/spacer.gif" width="1" height="1" border="0" alt=""></td>
<td bgcolor="#000000"><img src="Pics/spacer.gif" width="131" height="1" border="0" alt=""></td>
<td bgcolor="#000000"><img src="Pics/spacer.gif" width="13" height="1" border="0" alt=""></td>
<td bgcolor="#000000"><img src="Pics/spacer.gif" width="58" height="1" border="0" alt=""></td>
<td bgcolor="#000000"><img src="Pics/spacer.gif" width="94" height="1" border="0" alt=""></td>
<td bgcolor="#000000"><img src="Pics/spacer.gif" width="81" height="1" border="0" alt=""></td>
<td bgcolor="#000000"><img src="Pics/spacer.gif" width="48" height="1" border="0" alt=""></td>
<td bgcolor="#000000"><img src="Pics/spacer.gif" width="23" height="1" border="0" alt=""></td>
<td bgcolor="#000000"><img src="Pics/spacer.gif" width="38" height="1" border="0" alt=""></td>
<td bgcolor="#000000"><img src="Pics/spacer.gif" width="19" height="1" border="0" alt=""></td>
<td bgcolor="#000000"><img src="Pics/spacer.gif" width="108" height="1" border="0" alt=""></td>
<td bgcolor="#000000"><img src="Pics/spacer.gif" width="5" height="1" border="0" alt=""></td>
</tr>
<tr>
<td rowspan="5"><a href="index.html"><img name="fab_r1_c1" src="Pics/fab_r1_c1.gif" width="131" height="71" border="0" alt="Java cooperation home"></a></td>
<td rowspan="6" bgcolor="#737373"></td>
<td colspan="9" height="15" bgcolor="#737373"></td>
<td rowspan="8" bgcolor="#000000"><img src="Pics/spacer.gif" width="1" height="1" border="0" alt=""></td>
</tr>
<tr>
<td colspan="5"><div class="colontitul"><!-- InstanceBeginEditable name="Colontitul" -->Tutorial<!-- InstanceEndEditable --></div></td>
<td colspan="2" bgcolor="#737373"><img name="fab_r2_c8" src="Pics/fab_r2_c8.gif" width="57" height="19" border="0" alt="type and press Enter"></td>
<td colspan="2">
<FORM method=GET action="http://www.google.com/search">
<TABLE bgcolor="#FFFFFF" cellpadding="0" cellspacing="0" height="10px"><tr>
<td height="10" valign="middle">
<INPUT TYPE=text name=q size=18 maxlength=60 value="" style="font-size:12px; color:#000000; border-width: 0px;">
<input type=hidden name=domains value="http://javacooperation.gmxhome.de/">
<input type=hidden name=sitesearch value="http://javacooperation.gmxhome.de/" checked>
</td></tr></TABLE>
</td>
</form>
<td><img src="Pics/spacer.gif" width="1" height="19" border="0" alt=""></td>
</tr>
<tr>
<td colspan="9" bgcolor="#666666"><img name="fab_r3_c3" src="Pics/fab_r3_c3.gif" width="474" height="8" border="0" alt=""></td>
<td><img src="Pics/spacer.gif" width="1" height="8" border="0" alt=""></td>
</tr>
<tr>
<td colspan="6"><a href="TutorialStartDeu.html"><img src="Pics/deupanel_01.gif" width="56" height="22" border="0"></a><a href="OnlineSpieleStartDeu.html"><img src="Pics/deupanel_02.gif" width="94" height="22" border="0"></a><a href="DownloadsDeu.html"><img src="Pics/deupanel_03.gif" width="76" height="22" border="0"></a><a href="LinksDeu.html"><img src="Pics/deupanel_04.gif" width="52" height="22" border="0"></a><a href="KontaktDeu.html"><img src="Pics/deupanel_05.gif" width="64" height="22" border="0"></a></td>
<td><img name="fab_r4_c9" src="Pics/fab_r4_c9.gif" width="19" height="22" border="0" alt=""></td>
<td width="108" height="22" bgcolor="#666666"><div align="center"><span id="menulayer" style="position: relative; background-color:#666666; width:108; height:20; vertical-align:baseline; border:1px solid #FFFFFF"><a href="#" class="text" onmouseover="showMenu(); return true" onmouseout="initiateHideMenu(); return true">Select language</a></span>
</div>
<div id="submenulayer" style="position: absolute; visibility: hidden; background-color: #666666; width:108px;">
<div class="text" style="border:1px solid #FFFFFF; border-top-width:0; padding:5px">
<a href="#" onmouseover="cancelCloseMenu(); return true" onmouseout="initiateHideMenu(); return true">German</a><br>
<a href="indexEng.html" onmouseover="cancelCloseMenu(); return true" onmouseout="initiateHideMenu(); return true">English</a><br>
<a href="http://javacooperation.dev.juga.ru/index.html" onmouseover="cancelCloseMenu(); return true" onmouseout="initiateHideMenu(); return true">Russian</a>
</div>
</div>
</td>
<td><img name="fab_r4_c11" src="Pics/fab_r4_c11.gif" width="5" height="22" border="0" alt=""></td>
</tr>
<tr>
<td colspan="9"><img name="fab_r5_c3" src="Pics/fab_r5_c3.gif" width="474" height="7" border="0" alt=""></td>
</tr>
<tr>
<td colspan="11" style="padding:18; background-color:#333333; vertical-align:top;">
<div class="text">
<!-- InstanceBeginEditable name="EditRegion" -->
<h2>Die Bewegung eines Balles über das Applet</h2>
<p align="justify">
Zunächst wollen wir uns mit einer einfachen Animation beschäftigen. Wir wollen ein Java Applet programmieren, dass einen Kreis (Ball) von der einen Seite des Applets auf die andere bewegt. Dies ist sicherlich noch keine Großtat, aber irgendwie müssen wir ja beginnen.<br><br>
Zu Beginn müssen wir wieder unsere Applet Grundstruktur implementieren, wobei wir allerdings noch zwei Dinge hinzufügen müssen. Als Erstes muss man, um eine Animation in Java verwirklichen zu können das Interface Runnable implementieren und die dazugehörige Methode run(). Wir müssen unser Applet also folgendermaßen erweitern:</p>
import java.applet.*;<br>
import java.awt.*;<br><br>
public class BallApplet extends Applet <i>implements Runnable</i><br>
{
<ul>
public void init() { }<br><br>
public void start() { }<br><br>
public void stop() { }<br><br>
public void destroy() { }<br><br>
<i>public void run () { }</i><br><br>
public void paint (Graphics g) { }<br><br>
</ul>
}
<p align="justify">
Um nun ein Graphik - Objekt zu bewegen, brauchen wir außerdem einen sogenannten Thread, den wir in der Start - Methode schaffen: </p>
<p align="justify"><u>Threads</u><br>
Ein Thread ist ein eigenständiges Programmfragment, das parallel zu anderen Threads (Multithreading) laufen kann. Threads werden in Java durch die Klasse Thread und das Interface Runnable sowie die dazugehörige Funktion run() implementiert , was wir im obigen Abschnitt ja schon getan haben. Wichtige Funktionen zur Erzeugung eines Threads sind:</p>
<ul>
<li>Thread.start(): Startet einen Thread </li>
<li>Thread.stop(): Stopt einen Thread</li>
<li>Thread.sleep(Zeit in Millisekunden): Stopt den Thread für die Angegebene Zeitspanne</li>
</ul>
<p>
Die weiteren Funktionen der Klasse Thread können in der Java - API nachgelesen werden.</p>
public void start ()<br>
{
<ul>
// Schaffen eines neuen Threads, in dem das Spiel läuft<br>
Thread th = new Thread (this);<br>
// Starten des Threads<br>
th.start ();<br>
</ul>
}
<p align="justify">
Diesen Thread lassen wir nun in der Run - Methode laufen. Nach jedem Durchlauf der Run - Methode stoppen wir den Thread für eine gewisse Zeit um ihn dann erneut durchlaufen zu lassen:
Die run - Methode sollte also folgendermaßen aussehen:
</p>
public void run ()<br>
{
<ul>
// Erniedrigen der ThreadPriority <br>
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);<br><br>
// Solange true ist läuft der Thread weiter<br>
while (true)<br>
{
<ul>
// Neuzeichnen des Applets<br>
repaint();<br><br>
try<br>
{
<ul>
// Stoppen des Threads für in Klammern angegebene Millisekunden<br>
Thread.sleep (20);<br>
</ul>
}<br>
catch (InterruptedException ex)<br>
{
<ul>
// do nothing<br>
</ul>
}<br><br>
// Zurücksetzen der ThreadPriority auf Maximalwert<br>
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);<br>
</ul>
}
</ul>
}
<p align="justify">
Wir haben nun eine Endlosschleife, die alle Anweisungen innerhalb des while (true) - Blockes ausführt, 20 Millisekunden wartet um dann die selben Anweisungen erneut auszuführen. Wie aber sollen wir nun einen Kreis, der vom Applet gezeichnet wird bewegen. <br>
Nun, der Kreis hat ja eine x - Koordinate und eine y - Koordinate. Wenn wir nun in jedem Durchlauf des Threads die x - Koordinate um eins erhöhen würden, so würde sich der Ball entlang der x - Achse, bei gleichbleibender y- Koordinate, bewegen. <br><br>
Zeichnen wir also zunächst einen Kreis. Dazu verändern wir die paint - Methode wie folgt: </p>
public void paint (Graphics g)<br>
{
<ul>
// Setzten der Zeichenfarbe auf Rot<br>
g.setColor (Color.red);<br><br>
// Zeichen eines gefüllten Kreises<br>
g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);<br>
</ul>
}
<p align="justify">
und müssen noch folgende Instanzvariablen (am Kopf des Programmes) initialisieren:<br><br>
int x_pos = 10;<br>
int y_pos = 100;<br>
int radius = 20;<br><br>
Um den Ball nun zu bewegen verändern wir pro Threaddurchlauf die x -Koordinate um eins, die run - Methode sieht also jetzt so aus:
</p>
public void run ()<br>
{<br>
...
<ul>
while (true)<br>
{
<ul>
<i>// Verändern der X - Koordinate des Balles<br>
x_pos ++;</i><br>
...<br>
</ul>
}</ul>
}
<p align="justify">
Wenn man das Applet nun wie im 1. Kapitel gesehen in eine Html - Seite einbindet, dann sollte sich ein roter Ball einmal quer über das Applet bewegen.
</p>
<p><a href="SourceCodes/Ballbewegung1/Ballbewegung1.java">SourceCode download</a><br>
<a href="Applets/Ballbewegung1/BallBewegung1Applet.html">Applet ansehen</a>
<h4>Nächstes Kapitel</h4>
<a href="BildschirmflackernDeu.html">Reduzierung des Bildschirmflackerns</a>
<!-- InstanceEndEditable -->
</div>
</td>
</tr>
<tr>
<td colspan="11" style="background-color:#990000" align="center">
<table width="100%" style="padding:0"><tr>
<td width="88" bgcolor="#993300"><div align="center" style="font-size:10px; color: #FFFFFF;"> <a href="#top"> to top </a></div></td>
<td><div align="center" style="font-size:10px; color: #FFFFFF;">
<a href="mailto:javacooperation@gmx.de">Fabian Birzele</a>, 2001-2004.<br>
web-design: <a href="http://www.freehand.str.ru/">Vadim Murzagalin</a>, 2004.
</div></td>
<td width="88">
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</body>
<!-- InstanceEnd --></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -