📄 shootingspaceshipdeu.html
字号:
<html><!-- InstanceBegin template="/Templates/template.dwt" codeOutsideHTMLIsLocked="false" -->
<head>
<!-- InstanceBeginEditable name="doctitle" -->
<title>Java Cooperation: Ein schie?endes Raumschiff</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>Ein schießendes Raumschiff</h2>
<p align="justify">In diesem Kapitel möchte ich euch kurz erklären, wie man ein kleines Raumschiff (bzw. jeden anderen Spieler, Gegner...) dazu bringen kann Schüsse abzufeuern. Dieses Verhalten ist in Spielen wie MarsAttacks oder auch meinem Spiel <a href="Applets/Games/JrioGame/Jrio.html">J-Rio</a> unerlässlich und obwohl das Prinzip wirklich sehr einfach zu implementieren ist habe ich in letzter Zeit immer wieder Mails bekommen, die mich danach fragten (was natürlich keine Schande ist ;-). Also, nun wollen wir uns mal den Schüssen widmen.</p>
<h3>Das Prinzip</h3>
<p align="justify">Wie immer möchte ich kurz auf das Prinzip und auch das Klassendesign eingehen. Java ist eine objektorientierte Programmiersprache und da ein Schuss in jedem Spiel auch sehr eigenständige Eigenschaften hat (Bewegung, Tests auf Kollisionen mit Gegener, Zerstören des Schusses...) ist es eigentlich selbstverständlich, eine eigene Klasse <i>Shot</i> einzuführen. Diese implementiert das Verhalten des Schusses (z. B. Bewegung), speichert seine Kooridinaten und zeichent den Schuss an der richtigen Stelle im Spiel. Ein Schuss wird im allgemeinen von einem Spieler erzeugt, also werden wir unserem Spieler eine Methode generateShot() hinzufügen, die ein Objekt der Klasse Shot erzeugt (mit den richtigen Startkoordinaten, der richtigen Schussrichtung...) und dieses Objekt an die aufrufende Klasse zurückgibt. Die aufrufende Klasse wird in meinem Beispielapplet die Klasse Main sein. Diese speichert den gerade erzeugten und von der Playerklasse zurückgegebenen Schuss in einem Array aus Shots. In der run - Methode der Klasse Main wird nun das Shot - Array durchlaufen, die Schüsse werden bewegt, zerstört, wenn sie das Spielfeld verlassen und könnten auch auf Collisionen mit Gegnern, Levelelementen... getestet werden (in meinem Beispielapplet nicht implementiert). In der paint - Methode geschieht das selbe, auch hier wird das gesammte Array durchlaufen und alle Schüsse werden gezeichnet. <br>
Wenn ihr diesen Absatz und die dort dargestellten Zusammenhänge verstanden habt, dann braucht ihr eigentlich garnicht mehr weiterlesen. Denn die dazugehörigen Klassen sind wirklich extrem einfach und tun nichts Außergewöhnliches. Geübte Javaprogrammierer können sich also nun den Sourcecode runterladen und gleich mit eigenen Spielen loslegen. Für alle anderen, die Interesse haben, werde ich noch kurz auf die wichtigen Punkte in den einzelnen Klassen eingehen.</p>
<h3>Die Klasse Shot</h3>
<p align="justify">Wie schon erwähnt speichert diese Klasse die Kooridinaten des Schusses, verfügt über eine moveShot - Methode, die den Schuss in y - Richtung bewegt, sowie über eine drawShot() - Methode, die den Schuss zeichnet. Alle Methoden sind denkbar einfach, hier kommt nochmal der Sourcecode:</p>
<ul>import java.awt.Graphics;<br>
import java.awt.Color;<br><br>
public class Shot<br>
{<br>
<ul>
// Variablen<br>
private int x_pos;<br>
private int y_pos;<br><br>
// Schussradius<br>
private final int radius = 3;<br><br>
// Konstruktor<br>
public Shot(int x, int y)<br>
{<br>
<ul>x_pos = x;<br>
y_pos = y;<br></ul>
}<br><br>
// liefert die y - Position zurück<br>
public int getYPos()<br>
{<br>
<ul>return y_pos;<br></ul>
}<br><br>
// bewegt den Schuss in y - Richtung<br>
public void moveShot(int speed)<br>
{<br>
<ul>y_pos += speed;<br></ul>
}<br><br>
// zeichnet den Schuss<br>
public void drawShot(Graphics g)<br>
{<br>
<ul>g.setColor(Color.yellow);<br>
g.fillOval(x_pos, y_pos, radius, radius);<br></ul>
}<br></ul>
}<br></ul>
<h3>Die Klasse Player</h3>
<p align="justify">Auch die Klasse Player ist denkbar einfach. Auch sie verfügt über eine move - Methode (Bewegung in x - Richtung), eine draw - Methode und speichert die Kooridinaten des Schiffes. Die eigentlich interessante Methode ist die generateShot - Methode. Hier also nochmal kurz der Sourcecode:</p>
<ul><br>
import java.awt.Graphics;<br>
import java.awt.Color;<br><br>
public class Player<br>
{<br>
<ul>// Variablen<br>
private int x_pos;<br>
private int y_pos;<br><br>
// Konstruktor<br>
public Player(int x, int y)<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -