Startseite »
Forum »
RPG-Studio.org - Community »
Community-Forum »
Öffentliches Archiv »
RGSS Archiv »
Verfolger Script
Hi,
also es ist mein 1. Script, mit dem Script bringt ihr ein beliebiges Event dazu euch zu verfolgen, aber ich will jetzt nicht viel dazu sagen also hier:
Einzufügen ist das Script in Game_Player.
Ein paar Regeln dazu:
Also ihr könnt das bis jetzt nur mit einem Event machen, dieses eine Event müsst ihr Verfolger nennen, damit es den Hero verfolgt, es sollte auf Trought gestellt sein und am start direkt unterhalb des Heros gesetzt werden. Wenn euer Hero sicht Teleporiter müsst ihr das mit eurem Event auch machen und wieder genau hinter dem Hero Plazieren. Ansonsten müsst ihr eiggentlich nix mehr beachten.
mfg Hindi
PS ich hoffe es hat manchen Leuten weitergeholfen.
also es ist mein 1. Script, mit dem Script bringt ihr ein beliebiges Event dazu euch zu verfolgen, aber ich will jetzt nicht viel dazu sagen also hier:
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 |
#==============================================================================
# ** Game_Player
#------------------------------------------------------------------------------
# This class handles the player. Its functions include event starting
# determinants and map scrolling. Refer to "$game_player" for the one
# instance of this class.
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# * Invariables
#--------------------------------------------------------------------------
CENTER_X = (320 - 16) * 4 # Center screen x-coordinate * 4
CENTER_Y = (240 - 16) * 4 # Center screen y-coordinate * 4
#--------------------------------------------------------------------------
# * Passable Determinants
# x : x-coordinate
# y : y-coordinate
# d : direction (0,2,4,6,8)
# * 0 = Determines if all directions are impassable (for jumping)
#--------------------------------------------------------------------------
def passable?(x, y, d)
# Get new coordinates
new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
# If coordinates are outside of map
unless $game_map.valid?(new_x, new_y)
# Impassable
return false
end
# If debug mode is ON and ctrl key was pressed
if $DEBUG and Input.press?(Input::CTRL)
# Passable
return true
end
super
end
#--------------------------------------------------------------------------
# * Set Map Display Position to Center of Screen
#--------------------------------------------------------------------------
def center(x, y)
max_x = ($game_map.width - 20) * 128
max_y = ($game_map.height - 15) * 128
$game_map.display_x = [0, [x * 128 - CENTER_X, max_x].min].max
$game_map.display_y = [0, [y * 128 - CENTER_Y, max_y].min].max
end
#--------------------------------------------------------------------------
# * Move to Designated Position
# x : x-coordinate
# y : y-coordinate
#--------------------------------------------------------------------------
def moveto(x, y)
super
# Centering
center(x, y)
# Make encounter count
make_encounter_count
end
#--------------------------------------------------------------------------
# * Increaase Steps
#--------------------------------------------------------------------------
def increase_steps
super
# If move route is not forcing
unless @move_route_forcing
# Increase steps
$game_party.increase_steps
# Number of steps are an even number
if $game_party.steps % 2 == 0
# Slip damage check
$game_party.check_map_slip_damage
end
end
end
#--------------------------------------------------------------------------
# * Get Encounter Count
#--------------------------------------------------------------------------
def encounter_count
return @encounter_count
end
#--------------------------------------------------------------------------
# * Make Encounter Count
#--------------------------------------------------------------------------
def make_encounter_count
# Image of two dice rolling
if $game_map.map_id != 0
n = $game_map.encounter_step
@encounter_count = rand(n) + rand(n) + 1
end
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
# If party members = 0
if $game_party.actors.size == 0
# Clear character file name and hue
@character_name = ""
@character_hue = 0
# End method
return
end
# Get lead actor
actor = $game_party.actors[0]
# Set character file name and hue
@character_name = actor.character_name
@character_hue = actor.character_hue
# Initialize opacity level and blending method
@opacity = 255
@blend_type = 0
end
#--------------------------------------------------------------------------
# * Same Position Starting Determinant
#--------------------------------------------------------------------------
def check_event_trigger_here(triggers)
result = false
# If event is running
if $game_system.map_interpreter.running?
return result
end
# All event loops
for event in $game_map.events.values
# If event coordinates and triggers are consistent
if event.x == @x and event.y == @y and triggers.include?(event.trigger)
# If starting determinant is same position event (other than jumping)
if not event.jumping? and event.over_trigger?
event.start
result = true
end
end
end
return result
end
#--------------------------------------------------------------------------
# * Front Envent Starting Determinant
#--------------------------------------------------------------------------
def check_event_trigger_there(triggers)
result = false
# If event is running
if $game_system.map_interpreter.running?
return result
end
# Calculate front event coordinates
new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
# All event loops
for event in $game_map.events.values
# If event coordinates and triggers are consistent
if event.x == new_x and event.y == new_y and
triggers.include?(event.trigger)
# If starting determinant is front event (other than jumping)
if not event.jumping? and not event.over_trigger?
event.start
result = true
end
end
end
# If fitting event is not found
if result == false
# If front tile is a counter
if $game_map.counter?(new_x, new_y)
# Calculate 1 tile inside coordinates
new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
# All event loops
for event in $game_map.events.values
# If event coordinates and triggers are consistent
if event.x == new_x and event.y == new_y and
triggers.include?(event.trigger)
# If starting determinant is front event (other than jumping)
if not event.jumping? and not event.over_trigger?
event.start
result = true
end
end
end
end
end
return result
end
#--------------------------------------------------------------------------
# * Touch Event Starting Determinant
#--------------------------------------------------------------------------
def check_event_trigger_touch(x, y)
result = false
# If event is running
if $game_system.map_interpreter.running?
return result
end
# All event loops
for event in $game_map.events.values
# If event coordinates and triggers are consistent
if event.x == x and event.y == y and [1,2].include?(event.trigger)
# If starting determinant is front event (other than jumping)
if not event.jumping? and not event.over_trigger?
event.start
result = true
end
end
end
return result
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
if $var == nil
$move1 = 4
$var = 4
end
# Remember whether or not moving in local variables
last_moving = moving?
# If moving, event running, move route forcing, and message window
# display are all not occurring
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
# Move player in the direction the directional button is being pressed
@moved = 0
for i in $game_map.map.events.keys
if $game_map.map.events[i].name == "Verfolger"
$die_gewuenschte_id = i
end
end
case Input.dir4
when 2
move_down
unless moving?
else
if $die_gewuenschte_id != nil
if @moved != 1
$move = RPG::MoveRoute.new
$move.list =
[RPG::MoveCommand.new($move1)]
$game_map.events[$die_gewuenschte_id].force_move_route($move)
$move1 = 1
@moved = 1
$die_gewuenschte_id = nil
end
end
end
when 4
move_left
unless moving?
else
if $die_gewuenschte_id != nil
if @moved != 1
$move = RPG::MoveRoute.new
$move.list =
[RPG::MoveCommand.new($move1)]
$game_map.events[$die_gewuenschte_id].force_move_route($move)
$move1 = 2
@moved = 1
$die_gewuenschte_id = nil
end
end
end
when 6
move_right
unless moving?
else
if $die_gewuenschte_id != nil
if @moved != 1
$move = RPG::MoveRoute.new
$move.list =
[RPG::MoveCommand.new($move1)]
$game_map.events[$die_gewuenschte_id].force_move_route($move)
$move1 = 3
@moved = 1
$die_gewuenschte_id = nil
end
end
end
when 8
move_up
unless moving?
else
if $die_gewuenschte_id != nil
if @moved != 1
$move = RPG::MoveRoute.new
$move.list =
[RPG::MoveCommand.new($move1)]
$game_map.events[$die_gewuenschte_id].force_move_route($move)
$move1 = 4
@moved = 1
$die_gewuenschte_id = nil
end
end
end
end
end
# Remember coordinates in local variables
last_real_x = @real_x
last_real_y = @real_y
super
# If character moves down and is positioned lower than the center
# of the screen
if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
# Scroll map down
$game_map.scroll_down(@real_y - last_real_y)
end
# If character moves left and is positioned more let on-screen than
# center
if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
# Scroll map left
$game_map.scroll_left(last_real_x - @real_x)
end
# If character moves right and is positioned more right on-screen than
# center
if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
# Scroll map right
$game_map.scroll_right(@real_x - last_real_x)
end
# If character moves up and is positioned higher than the center
# of the screen
if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
# Scroll map up
$game_map.scroll_up(last_real_y - @real_y)
end
# If not moving
unless moving?
# If player was moving last time
if last_moving
# Event determinant is via touch of same position event
result = check_event_trigger_here([1,2])
# If event which started does not exist
if result == false
# Disregard if debug mode is ON and ctrl key was pressed
unless $DEBUG and Input.press?(Input::CTRL)
# Encounter countdown
if @encounter_count > 0
@encounter_count -= 1
end
end
end
end
# If C button was pressed
if Input.trigger?(Input::C)
# Same position and front event determinant
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
end
end
end
end |
zum Lesen den Text mit der Maus markieren
Einzufügen ist das Script in Game_Player.
Ein paar Regeln dazu:
Also ihr könnt das bis jetzt nur mit einem Event machen, dieses eine Event müsst ihr Verfolger nennen, damit es den Hero verfolgt, es sollte auf Trought gestellt sein und am start direkt unterhalb des Heros gesetzt werden. Wenn euer Hero sicht Teleporiter müsst ihr das mit eurem Event auch machen und wieder genau hinter dem Hero Plazieren. Ansonsten müsst ihr eiggentlich nix mehr beachten.
mfg Hindi
PS ich hoffe es hat manchen Leuten weitergeholfen.
Mehr als a Allgäuer ka a Mensch it wera.
Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Reborn« (10. Januar 2009, 01:59)
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
:/
Was ist denn daran verändert?
(Jaha, ich bin gerade sowas von zu faul zu suchen xD)
Was ist denn daran verändert?
(Jaha, ich bin gerade sowas von zu faul zu suchen xD)
Wie war das noch gleich mit Respekt? Tztztz, typisch Neo-Bahamut, unverbesserlich xD Also, für deine faulen blinden Augen: GUCK VERDAMMT NOCHMAL IN'S UPDATE REIN!!!
So... Ach und so nebenbei... Wenn du zu faul bist, etwas zu lesen, biste natürlich ungenügend über das aktive Thema informiert. Und wer keine Ahnung hat, sollte Ruhe geben.
Als guten Rat: Augen aufreißen. Spätestens die ganzen, an einem Fleck versammelten, "$" inklusive deutschsprachiger Var-Namen sind auffällig genug, um diese Änderung nicht zu übersehen... <__<"
(Ja, ich hab' meine Tage)
So... Ach und so nebenbei... Wenn du zu faul bist, etwas zu lesen, biste natürlich ungenügend über das aktive Thema informiert. Und wer keine Ahnung hat, sollte Ruhe geben.
Als guten Rat: Augen aufreißen. Spätestens die ganzen, an einem Fleck versammelten, "$" inklusive deutschsprachiger Var-Namen sind auffällig genug, um diese Änderung nicht zu übersehen... <__<"
(Ja, ich hab' meine Tage)
-
Werbung -
1plus3
-
Nuuuhminaaah
-
compétences(Dieser Tab ist rein satirisch.)mes compétences
max.
Maps machen
Musik machen
Scripts machen
Story ausdenken
Pixeln und so
Events proggen
-
mes projets-
Silentium
Name: Silentium
Maker: Eigenbau (C++, x86-SSE/AVX-Assembly, Ruby/Lua)
Story
NPCs
Scripts
Ressis
Maps
Gesamt(3+4)% 42 69% 0815 -17.438 103.38% ± 6.3mm²
(Die Tabelle erfüllt lediglich satirische Zwecke.) -
OnyxEine in C++ implementierte, modulare, plattformunabhängige, virtuelle Maschine. Die Test-Version ist bereits halb fertig. Ab dann gibt es vielleicht mehr Infos. Sie soll die auf dem ersten Blick LISP-artige und eigens dafür konstruierte Sprache Obsidian ausführen können. Experimentell wird auch ein Lua-Compiler für Onyx gebaut. Ziel ist eine leistungsfähige, virtuelle Maschine für beliebige Scriptsprachen. Theoretisch gesehen müsste man bloß noch einen kompatiblen Compiler schreiben, der Quellcode jener Sprache in Onyx-Assembly, oder direkt in Onyx-Bytecode übersetzt. Ob die jemand nutzen wird, ist eine andere Frage und nur ein sekundäres... nein, eher tertiäres Ziel dieser VM. Primär dient es mir lediglich dazu, mein Verständnis von Hardware, ISA, und Assembly zu vertiefen, sowie eigene Grenzen auszutesten.
Warnung!
Das Entwickeln einer virtuellen Maschine oder Programmiersprache (im wahnsinnigsten Fall beides) ist eine höchst komplizierte Tätigkeit, aus der viel Frust und Hirnmatsche hervor gehen. Sollte sich dennoch ein ähnlich wahnsinniger finden, der sowas zusammen schustern will, so lege ich ihm/ihr die folgenden Bücher ans Herz:- Compiler - Das Drachenbuch [978-3-8273-7097-6]
Dieses Buch schlachtet ausführlich und leicht verständlich die Grundlagen bis hoch zu den Experten-Techniken des Compilerbaus aus. Es fängt mit der Automaten-Theorie und formalen Sprachen an, arbeitet sich durch Analysetechniken vor, und landet schließlich bei Techniken wie Optimierung und Register-Zuweisung. Das Buch wiegt 3Kg oder 4Kg. Hab's mal gewogen. Ist also nicht gerade die Lektüre für unterwegs.
- Computerarchitektur [3-8273-7016-7]
Hier werden leicht verständlich die wichtigsten Entwicklungen der Rechnerarchitekturen erklärt (Gut, das Buch ist in die Jahre gekommen, aber der Weg zu heute ist ein winziger Schritt, den man sich nach diesem Buch selbst erdenken kann). Hauptbestandteil des Buchs ist eine relativ umfassende Betrachtung der Funktionsweise dreier gänzlich unterschiedlicher, aber dominierender Prozessor-Typen am Beispiel des Pentium II, UltraSPARC II, sowie picoJava. Die meisten Elemente dieses Buchs sind zwar für die Konstruktion einer virtuellen Maschine irrelevant, oder aufgrund der Tatsache, dass die VM Software ist und z.B. Byte-Grenzen hat, sogar zu Leistungseinbußen führen kann, doch ist ein hinreichendes Verständnis dieser Maschinen, mit denen wir arbeiten, äußerst hilfreich für die Überlegungen, wie die VM arbeiten soll.
Es kann sehr hilfreich und inspirierend sein, den Code quelloffener, virtueller Maschinen anderer Sprachen zu überfliegen. Meine Lieblings-Quelle war und ist stets die VM von Lua. Sie ist schlank, verständlich, in C implementiert, und basiert im Gegensatz zu vielen anderen Scriptsprachen-VMs auf einer Register-Maschine statt einer Stapelmaschine. Es wäre natürlich vorteilhaft, die entsprechende Sprache zu verstehen, in der man auch die eigene VM implementieren will. Weiterhin ist es äußerst vorteilhaft, eine leistungsstarke und bequeme Sprache wie C++ zu beherrschen, um die VM zu implementieren. Und bevor irgendwer auf die Idee kommt: Assembly ist NICHT als dominierende Sprache für den Bau einer VM geeignet. Wer die Frage des "Warum?" nicht beantworten kann, sollte zunächst die gewählte Sprache und Assembly hinreichend verstehen lernen, und es dann erneut mit der Frage versuchen. Es lohnt sich dennoch, Assembly zu lernen. Allein schon, um erneut das Verständnis zu vertiefen, zumal ihr mehr oder weniger gezwungen seid, auch für eure VM eine Assembler-Sprache zu entwickeln (Außer natürlich ihr schreibt eure Test-Programme Bit für Bit ;3). - Compiler - Das Drachenbuch [978-3-8273-7097-6]
-
-
enfinJe ne peux pas parler français.
C'est tout ce que Goodle et les restes de cours de français.
ja nen nützliches script(auch wenn es das glaub ich schon gibt bin mir aber nicht sicher^^)vor allem wenn mann seine gruppe hintre sich herlaufen lassen will.
Vielleicht könntest du noch machen das mehrere hinter dem Hero herlaufen.
konnt ich vielleicht auch selbst wenn ich nicht so faul wär xD
naja schönes Script
Vielleicht könntest du noch machen das mehrere hinter dem Hero herlaufen.
konnt ich vielleicht auch selbst wenn ich nicht so faul wär xD
naja schönes Script
-
Viren!
ACHTUNG:
Viruswarnung! Unbedingt lesen!
Ich investiere mein Geld lieber in Alkohol,statt es zur Bank zu bringen. (wichtiger Tipp: Nirgendwo bringt das Geld mehr Prozente!) - AntidialerEs gibt einen neuen, äusserst gefährlichen Computer-Virus, der verheerende Auswirkungen haben kann. Microsoft, IBM, NAI, Symantec und auch sämtliche Banken haben seine Existenz bereits bestätigt! Der Name des Virus ist:
A.R.B.E.I.T
Wenn du ARBEIT von irgendwoher bekommst, ob von Kollegen oder von Deinem Chef, via E-Mail oder via Internet, öffne es nicht, schau es nicht an und rühre es auf keinen Fall an! Wir haben diesen Virus seit einiger Zeit in unseren Gebäuden und Systemen und jeder, der ARBEIT geöffnet hat, musste feststellen, dass sein komplettes Privatleben gelöscht wurde und das Gehirn seine normalen Funktionen aufgegeben hat.
Wenn Du via E-Mail ARBEIT bekommst, kannst Du es nur vernichten, indem Du (ohne es zu öffnen) mit einer E-Mail erwiderst: "Ich habe schon genug ARBEIT von Ihnen erhalten, es reicht! Ich bin in die Kneipe gegangen!". Auf diesem Weg vergisst Dein Gehirn ARBEIT.
Wenn Du ARBEIT in Papierform bekommst, auf gar keinen Fall beachten! Nicht lesen, sondern sofort in den Papierkorb weiterleiten! Nimm Mantel und Hut sowie zwei gute Freunde oder Freundinnen mit, gehe sofort in die nächstgelegene Kneipe und bestelle je drei Bier! Wenn Du dies 14mal wiederholst, wirst Du sehen, dass du ARBEIT aus deinem Gehirn vollständig gelöscht hast.
Bitte diese Warnung sofort an alle Freunde und Bekannten weiterleiten! Solltest Du keine Freunde oder Kollegen mehr haben, bedeutet dies, dass Du infiziert bist und ARBEIT Dein Leben bereits vollkommen unter Kontrolle hat.
Also: Vorsicht, Vorsicht und noch einmal Vorsicht.
OMG!! Die Viren werden immer unverschämter!zum Lesen den Text mit der Maus markieren -
Arbeit
Die Bevölkerung von Deutschland beträgt derzeit 80 Millionen Menschen. Davon sind 20.5 Millionen Rentner. Es verbleiben also 59.5 Millionen, um die ganze Arbeit zu verrichten. Zieht man noch 22 Millionen Kinder, Schüler und Studenten ab, verbleiben noch 37,5 Millionen. Dann sind da aber noch 4 Millionen Arbeitslose, 16 Millionen Beamte, die auch kaum etwas tun, sowie 14 Millionen Hausfrauen bzw. Mütter. Bleiben also 3.5 Millionen Menschen übrig. 300.000 befinden sich zudem beim Militär / Zivildienst 1.7 Millionen im Krankenstand / Krankenhaus, weitere 1.4 Millionen im Urlaub, 40.000 sind Obdachlose/Penner und 59998 befinden sich im Gefängnis. Somit bleiben nur 2 armselige Trottel übrig, um die ganze Arbeit zu erledigen. Du und ich. Und was tust Du? ....Sitzt da und liest dieses dumme Signatur. Kein Wunder, daß ich total überlastet bin !!!
SCHÄM DICH!!! -
Schizo?
Ich und Schizophren? NIEMALS!!!
Nur weil ich zwei Persöhnlichkeiten habe?
zum Lesen den Text mit der Maus markieren
Zitat
ja nen nützliches script(auch wenn es das glaub ich schon gibt bin mir aber nicht sicher^^)
Ja gibt es nochmal^^" Haben Hindi und ich relativ gleichzeitig gepostet^^" Wenn du nur die Schatzsuche mit einem Dackelchara willst, empfehle ich Hindi's, ist benutzerfreundlicher^^ Amsonsten... wenn du viiieeele Events bewegen willst, im selben Forum hier ist meine Version (CCB_ESM).
Zitat
Vielleicht könntest du noch machen das mehrere hinter dem Hero herlaufen.
-
Werbung -
1plus3
-
Nuuuhminaaah
-
compétences(Dieser Tab ist rein satirisch.)mes compétences
max.
Maps machen
Musik machen
Scripts machen
Story ausdenken
Pixeln und so
Events proggen
-
mes projets-
Silentium
Name: Silentium
Maker: Eigenbau (C++, x86-SSE/AVX-Assembly, Ruby/Lua)
Story
NPCs
Scripts
Ressis
Maps
Gesamt(3+4)% 42 69% 0815 -17.438 103.38% ± 6.3mm²
(Die Tabelle erfüllt lediglich satirische Zwecke.) -
OnyxEine in C++ implementierte, modulare, plattformunabhängige, virtuelle Maschine. Die Test-Version ist bereits halb fertig. Ab dann gibt es vielleicht mehr Infos. Sie soll die auf dem ersten Blick LISP-artige und eigens dafür konstruierte Sprache Obsidian ausführen können. Experimentell wird auch ein Lua-Compiler für Onyx gebaut. Ziel ist eine leistungsfähige, virtuelle Maschine für beliebige Scriptsprachen. Theoretisch gesehen müsste man bloß noch einen kompatiblen Compiler schreiben, der Quellcode jener Sprache in Onyx-Assembly, oder direkt in Onyx-Bytecode übersetzt. Ob die jemand nutzen wird, ist eine andere Frage und nur ein sekundäres... nein, eher tertiäres Ziel dieser VM. Primär dient es mir lediglich dazu, mein Verständnis von Hardware, ISA, und Assembly zu vertiefen, sowie eigene Grenzen auszutesten.
Warnung!
Das Entwickeln einer virtuellen Maschine oder Programmiersprache (im wahnsinnigsten Fall beides) ist eine höchst komplizierte Tätigkeit, aus der viel Frust und Hirnmatsche hervor gehen. Sollte sich dennoch ein ähnlich wahnsinniger finden, der sowas zusammen schustern will, so lege ich ihm/ihr die folgenden Bücher ans Herz:- Compiler - Das Drachenbuch [978-3-8273-7097-6]
Dieses Buch schlachtet ausführlich und leicht verständlich die Grundlagen bis hoch zu den Experten-Techniken des Compilerbaus aus. Es fängt mit der Automaten-Theorie und formalen Sprachen an, arbeitet sich durch Analysetechniken vor, und landet schließlich bei Techniken wie Optimierung und Register-Zuweisung. Das Buch wiegt 3Kg oder 4Kg. Hab's mal gewogen. Ist also nicht gerade die Lektüre für unterwegs.
- Computerarchitektur [3-8273-7016-7]
Hier werden leicht verständlich die wichtigsten Entwicklungen der Rechnerarchitekturen erklärt (Gut, das Buch ist in die Jahre gekommen, aber der Weg zu heute ist ein winziger Schritt, den man sich nach diesem Buch selbst erdenken kann). Hauptbestandteil des Buchs ist eine relativ umfassende Betrachtung der Funktionsweise dreier gänzlich unterschiedlicher, aber dominierender Prozessor-Typen am Beispiel des Pentium II, UltraSPARC II, sowie picoJava. Die meisten Elemente dieses Buchs sind zwar für die Konstruktion einer virtuellen Maschine irrelevant, oder aufgrund der Tatsache, dass die VM Software ist und z.B. Byte-Grenzen hat, sogar zu Leistungseinbußen führen kann, doch ist ein hinreichendes Verständnis dieser Maschinen, mit denen wir arbeiten, äußerst hilfreich für die Überlegungen, wie die VM arbeiten soll.
Es kann sehr hilfreich und inspirierend sein, den Code quelloffener, virtueller Maschinen anderer Sprachen zu überfliegen. Meine Lieblings-Quelle war und ist stets die VM von Lua. Sie ist schlank, verständlich, in C implementiert, und basiert im Gegensatz zu vielen anderen Scriptsprachen-VMs auf einer Register-Maschine statt einer Stapelmaschine. Es wäre natürlich vorteilhaft, die entsprechende Sprache zu verstehen, in der man auch die eigene VM implementieren will. Weiterhin ist es äußerst vorteilhaft, eine leistungsstarke und bequeme Sprache wie C++ zu beherrschen, um die VM zu implementieren. Und bevor irgendwer auf die Idee kommt: Assembly ist NICHT als dominierende Sprache für den Bau einer VM geeignet. Wer die Frage des "Warum?" nicht beantworten kann, sollte zunächst die gewählte Sprache und Assembly hinreichend verstehen lernen, und es dann erneut mit der Frage versuchen. Es lohnt sich dennoch, Assembly zu lernen. Allein schon, um erneut das Verständnis zu vertiefen, zumal ihr mehr oder weniger gezwungen seid, auch für eure VM eine Assembler-Sprache zu entwickeln (Außer natürlich ihr schreibt eure Test-Programme Bit für Bit ;3). - Compiler - Das Drachenbuch [978-3-8273-7097-6]
-
-
enfinJe ne peux pas parler français.
C'est tout ce que Goodle et les restes de cours de français.
Ähnliche Themen
-
RGSS 1 Probleme & Talk »-
Verfolger Script
(9. Januar 2009, 21:37)
-
Einsteigerhilfe »-
Bedingungen
(17. März 2008, 12:55)
-
Einsteigerhilfe »-
Spielfigur wird nicht wieder sichtbar
(23. Juli 2007, 17:53)
-
RGSS Archiv »-
Sound für jeden einzelnen Buchstaben..
(4. Januar 2005, 16:55)







