Ein Sprite in bestimmter "fester" Zeit bewegen
Servus..
aaalsooo...
Iwie scheine ich atm ne riesen Blockade zu haben.. Teilweise bin ich schon happy wenn ich es schaffe ein Sprite ohne Anleitung anzuzeigen (ich glaub das lag am osterstress)...
naja.. auf jeden fall:
Ich suche ein stück code.
Dabei habe ich 1 Sprite "@anicard", sowie XY Koordinaten "@goal[x,y]"
Was ich nun brauche:
Der Code soll ermitteln, wieviele pixel pro Frame ich das sprite an X und Y bewegen muss, damit es innerhalb von den von mir angegebenen Frames zu @goal bewegt. Dabei soll es egal sein, wie weit das Sprite vond en zielkoordinaten weg ist. Es soll sich immer innerhalbd er Frames zum Ziel bewegen.
*hope* das iwer ne idee hat...
aaalsooo...
Iwie scheine ich atm ne riesen Blockade zu haben.. Teilweise bin ich schon happy wenn ich es schaffe ein Sprite ohne Anleitung anzuzeigen (ich glaub das lag am osterstress)...
naja.. auf jeden fall:
Ich suche ein stück code.
Dabei habe ich 1 Sprite "@anicard", sowie XY Koordinaten "@goal[x,y]"
Was ich nun brauche:
Der Code soll ermitteln, wieviele pixel pro Frame ich das sprite an X und Y bewegen muss, damit es innerhalb von den von mir angegebenen Frames zu @goal bewegt. Dabei soll es egal sein, wie weit das Sprite vond en zielkoordinaten weg ist. Es soll sich immer innerhalbd er Frames zum Ziel bewegen.
*hope* das iwer ne idee hat...
There was a Cave,
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@anicard = Sprite.new @goal = [10, 10] frames = 3 x, y = @anicard.x, @anicard.y newx, newy = @goal deltax, deltay = newx-x, newy-y movex, movey = deltax/frames, deltay/frames frames.times do Graphics.update @anicard.x += movex @anicard.y += movey end |
k.. nur 1 Problem....

Sieht soweit ok aus. bewegt sich..dreht sich.. läuft...
ABER:

Die @goal koordinaten stimmen.. nur iwie verfehlt er den eigentlichen zielplatz immer.

Sieht soweit ok aus. bewegt sich..dreht sich.. läuft...
ABER:

Die @goal koordinaten stimmen.. nur iwie verfehlt er den eigentlichen zielplatz immer.
There was a Cave,
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
Das liegt dann wahrscinelich daran, dass movex und movey nur Integer sind. Alternative wäre es so zu machen:
Dann bräuchtest du eben noch eine Klasse oder nur einen Array, der die Koordinaten als Floats speichert.
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@anicard = Sprite.new @goal = [10, 10] realxy = [@anicard.x.to_f, @anicard.y.to_f] frames = 3 x, y = realxy newx, newy = @goal deltax, deltay = newx-x, newy-y movex, movey = deltax/frames, deltay/frames frames.times do Graphics.update realxy[0] += movex realxy[1] += movey @anicard.x = realxy[0].round @anicard.y = realxy[1].round end |
Dann bräuchtest du eben noch eine Klasse oder nur einen Array, der die Koordinaten als Floats speichert.
iwie schafft er es immernoch das Ziel ned zu erreichen, und dann innerhalb von einemf rame zum andern 40-50 pixel weit zum ziel zu springen ( sieht blöd aus )..
Ich geb jetzt einfach ma den code.. ungeachtet dessen wie unfertig er ist:
Ich geb jetzt einfach ma den code.. ungeachtet dessen wie unfertig er ist:
|
|
Ruby 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 |
def card_place_animation(start=0, ziel=0, card="", typus="") $duelwindow.back_opacity = 190 @anicard = Sprite.new @anicard.bitmap = RPG::Cache.picture("/Cards/"+card) @anicard.x = $spritearray_held[start].x @anicard.y = $spritearray_held[start].y @anicard.ox = @anicard.bitmap.width/2 @anicard.oy = @anicard.bitmap.height/2 @anicard.zoom_x = 0.5 @anicard.zoom_y = @anicard.zoom_x @anicard.z = 9999 $spritearray_held[start].opacity = 0 @target_id = ziel @goal = [$feld_setup["held"][@target_id][0], $feld_setup["held"][@target_id][1]] @realxy = [@anicard.x.to_f, @anicard.y.to_f] @pixelfly = [0,0,""] @pixelfly[2] = typus frames = 60 x, y = @anicard.x, @anicard.y newx, newy = @goal deltax, deltay = newx-x, newy-y @pixelfly[0], @pixelfly[1] = deltax/frames, deltay/frames @phase3 = 1 @phase2 = 1 frames.times do Graphics.update $duelwindow.fadeout if(@phase2 == 1) @realxy[0] += @pixelfly[0] @realxy[1] += @pixelfly[1] @anicard.x = @realxy[0].round @anicard.y = @realxy[1].round @anicard.zoom_x -= 0.05 if(@anicard.zoom_x > 0.2) @anicard.zoom_y = @anicard.zoom_x if(@pixelfly[2] == "zauber") if(@target_id == 5 && @anicard.angle != 270) @anicard.angle += 5 elsif(@target_id == 6 && @anicard.angle != 90) @anicard.angle += 5 end end end @anicard.x = @goal[0] @anicard.y = @goal[1] @anicard.zoom_x = 0.2 @anicard.zoom_y = @anicard.zoom_x if(@pixelfly[2] == "zauber") if(@target_id == 5) @anicard.angle = 270 elsif(@target_id == 60) @anicard.angle = 90 end end @anicard.dispose end |
zum Lesen den Text mit der Maus markieren
There was a Cave,
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
Diese Zeile ist bei dir anders.
Zitat
x, y = @anicard.x, @anicard.y
Weil du direkt auf @anicard.x und nicht auf @realxy zugreifst ist x ein Integer. Somit ist deltax auch ein Integer und Integer/Integer ist gleich Integer :D
Das Problem dürften Rundungsfehler sein... daher müsste Neo seinen Code so editieren:
Dadurch werden die Rundungsfehler durch stures truncaten abgeschwächt. ceil() ist die genaueste Rundungsmethode. Beispiel:
Na wenn das mal kein Unterschied ist! Und jetzt nehm mal 'ne noch größere Zahl! Mal so nebenbei, den Code zeigte ich dir doch gestern Abend oder heute Morgen?
Ich kann mir nur zwei Fehlerquellen denken:
Evrey
P.S.: Ruby ist OOP, du solltest dich unbedingt mal in Klassen und Module einlernen o__O"
|
|
Ruby Quellcode |
1 |
movex, movey = (deltax/(frames.to_f())).ceil(), (deltay/(frames.to_f())).ceil() |
|
|
Ruby Quellcode |
1 2 3 4 5 6 |
deltax = 32 frames = 5 movex0 = (deltax/(frames.to_f())).ceil() movex1 = deltax/frames Kernel.p(movex0,movex1) #=> |
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
irb(main):001:0> deltax = 32 => 32 irb(main):002:0> frames = 5 => 5 irb(main):003:0> movex0 = (deltax/(frames.to_f())).ceil() => 7 irb(main):004:0> movex1 = deltax/frames => 6 irb(main):005:0> irb(main):006:0* Kernel.p(movex0,movex1) 7 6 => [7, 6] |
Ich kann mir nur zwei Fehlerquellen denken:
- Deine Koordinaten sind inkorrekt.
- Durch das Gedrehe deines Sprites (drehst du es?) ändert sich auch der Bezugspunkt dieses Sprites (obere linke Ecke). Den zu bestimmen ist nicht nur kompliziert, es würde zu einem Eiern des Bildes führen.
Evrey
P.S.: Ruby ist OOP, du solltest dich unbedingt mal in Klassen und Module einlernen o__O"
-
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.
Zitat
Durch das Gedrehe deines Sprites (drehst du es?) ändert sich auch der Bezugspunkt dieses Sprites (obere linke Ecke). Den zu bestimmen ist nicht nur kompliziert, es würde zu einem Eiern des Bildes führen.
weshalbd er bezugspunkt des Sprites auch im zentrum liegt...
dennoch verfehlt er das ziel ( mit evys methode )
There was a Cave,
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.
Äh, nee?
Soweit, so gut, damit setzt du ihn mittig, ABER...
Wo setzt du dort nochmal dieses Offset? Wenn du ein Bild drehst, ändert sich die Bildgröße, sodass die verschobenen Pixel im Bild bleiben. Du musst das Offset nach jedem Dreher neu setzen. Dadurch bleibt der "Mittelpunkt" an der später falschen stelle. Das Bild eiert, Vermutung 2 stimmt also doch ._.
|
|
Ruby Quellcode |
1 2 |
@anicard.ox = @anicard.bitmap.width/2 @anicard.oy = @anicard.bitmap.height/2 |
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
frames.times do Graphics.update $duelwindow.fadeout if(@phase2 == 1) @realxy[0] += @pixelfly[0] @realxy[1] += @pixelfly[1] @anicard.x = @realxy[0].round @anicard.y = @realxy[1].round @anicard.zoom_x -= 0.05 if(@anicard.zoom_x > 0.2) @anicard.zoom_y = @anicard.zoom_x if(@pixelfly[2] == "zauber") if(@target_id == 5 && @anicard.angle != 270) @anicard.angle += 5 elsif(@target_id == 6 && @anicard.angle != 90) @anicard.angle += 5 end end end |
-
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.
selbstw enn ich den offset neu setze.. verfehlt er das ziel....
|
|
Ruby 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 |
def card_place_animation(start=0, ziel=0, card="", typus="") $duelwindow.back_opacity = 190 @anicard = Sprite.new @anicard.bitmap = RPG::Cache.picture("/Cards/"+card) @anicard.x = $spritearray_held[start].x @anicard.y = $spritearray_held[start].y @anicard.ox = @anicard.bitmap.width/2 @anicard.oy = @anicard.bitmap.height/2 @anicard.zoom_x = 0.5 @anicard.zoom_y = @anicard.zoom_x @anicard.z = 9999 $spritearray_held[start].opacity = 0 @target_id = ziel @goal = [$feld_setup["held"][@target_id][0], $feld_setup["held"][@target_id][1]] @realxy = [@anicard.x.to_f, @anicard.y.to_f] @pixelfly = [0,0,""] @pixelfly[2] = typus frames = 60 x, y = @realxy newx, newy = @goal deltax, deltay = newx-x, newy-y @pixelfly[0], @pixelfly[1] = (deltax/(frames.to_f())).ceil(), (deltay/(frames.to_f())).ceil() @phase3 = 1 @phase2 = 1 frames.times do Graphics.update $duelwindow.fadeout if(@phase2 == 1) @realxy[0] += @pixelfly[0] @realxy[1] += @pixelfly[1] @anicard.x = @realxy[0].round @anicard.y = @realxy[1].round @anicard.zoom_x -= 0.05 if(@anicard.zoom_x > 0.2) @anicard.zoom_y = @anicard.zoom_x if(@pixelfly[2] == "zauber") if(@target_id == 5 && @anicard.angle != 270) @anicard.ox = @anicard.bitmap.width/2 @anicard.oy = @anicard.bitmap.height/2 @anicard.angle += 5 elsif(@target_id == 6 && @anicard.angle != 90) @anicard.ox = @anicard.bitmap.width/2 @anicard.oy = @anicard.bitmap.height/2 @anicard.angle += 5 end end end @anicard.x = @goal[0] @anicard.y = @goal[1] @anicard.zoom_x = 0.2 @anicard.zoom_y = @anicard.zoom_x if(@pixelfly[2] == "zauber") if(@target_id == 5) @anicard.angle = 270 elsif(@target_id == 60) @anicard.angle = 90 end end @anicard.dispose end |
There was a Cave,
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.
Mal etwas, das ich absolut nicht raffe:
HÄ? Du, ich blick' da kaum durch, weil du blödsinnig viele Vars nutzt, die nichtmal wirklich einen Sinn ergeben. Und wozu setzt du die Koordinaten bei @realxy auf Floats??? Und was bringt dieses @realxy überhaupt? Wieso nicht sofort auf die echten Koordinaten rauf addieren? Und überhaupt... wozu ein round() bei dem @realxy??? So kommen doch nur wieder unsinnige Rundungsfehler rein, mal abgesehen davon, dass du prinzipiell das tust:
Schlanke deinen Code bitte mal ab, dann blickt man auch besser durch...
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
def card_place_animation(start=0, ziel=0, card="", typus="") #... @anicard.x = $spritearray_held[start].x @anicard.y = $spritearray_held[start].y #... @realxy = [@anicard.x.to_f, @anicard.y.to_f] #... x, y = @realxy newx, newy = @goal deltax, deltay = newx-x, newy-y @pixelfly[0], @pixelfly[1] = (deltax/(frames.to_f())).ceil(), (deltay/(frames.to_f())).ceil() #... frames.times do #... @realxy[0] += @pixelfly[0] @realxy[1] += @pixelfly[1] @anicard.x = @realxy[0].round @anicard.y = @realxy[1].round #... end #... |
|
|
Ruby Quellcode |
1 |
@realxy = [x.to_f.to_i(),y.to_f.to_i()] |
-
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.
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
Esper, schonmal meine Methode getestet? oô
@Neo: ja.....
So.. also..
Hier nochma mein eigentlicher code ( ohne jegliche änderrungen):
was ich rbauche ist: für diese beiden zeilen:
Die berechnung des wegs, den des sprite pro frame zurücklegen muss.
So.. also..
Hier nochma mein eigentlicher code ( ohne jegliche änderrungen):
|
|
Ruby 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 |
def card_place_animation(start=0, ziel=0, card="", typus="") $duelwindow.back_opacity = 190 @anicard = Sprite.new @anicard.bitmap = RPG::Cache.picture("/Cards/"+card) @anicard.x = $spritearray_held[start].x @anicard.y = $spritearray_held[start].y @anicard.zoom_x = 0.5 @anicard.zoom_y = @anicard.zoom_x @anicard.z = 9999 $spritearray_held[start].opacity = 0 @goal = [$feld_setup["held"][ziel][0], $feld_setup["held"][ziel][1]] @pixelfly = [0,0,""] @pixelfly[2] = typus # "zauber" oder "monster"? zauberkarten drehen sich und ändern bezugspunkt @pixelfly[0] = 0 #Der X-weg den ein sprite pro frame zurücklegen muss @pixelfly[1] = 0 #Der Y-weg den ein sprite pro frame zurücklegen muss frames = 60 frames.times do Graphics.update @anicard.x += @pixelfly[0] @anicard.y += @pixelfly[1] $duelwindow.fadeout if(@phase2 == 1) @anicard.zoom_x -= 0.05 if(@anicard.zoom_x > 0.2) @anicard.zoom_y = @anicard.zoom_x if(@pixelfly[2] == "zauber") if(ziel == 5 && @anicard.angle != 270) @anicard.ox = @anicard.bitmap.width/2 @anicard.oy = @anicard.bitmap.height/2 @anicard.angle += 5 elsif(ziel == 6 && @anicard.angle != 90) @anicard.ox = @anicard.bitmap.width/2 @anicard.oy = @anicard.bitmap.height/2 @anicard.angle += 5 end end end @anicard.x = @goal[0] @anicard.y = @goal[1] @anicard.zoom_x = 0.2 @anicard.zoom_y = @anicard.zoom_x if(@pixelfly[2] == "zauber") if(ziel == 5) @anicard.angle = 270 elsif(ziel == 60) @anicard.angle = 90 end end @anicard.dispose end |
was ich rbauche ist: für diese beiden zeilen:
|
|
Ruby Quellcode |
1 2 |
@pixelfly[0] = 0 #Der X-weg den ein sprite pro frame zurücklegen muss @pixelfly[1] = 0 #Der Y-weg den ein sprite pro frame zurücklegen muss |
Die berechnung des wegs, den des sprite pro frame zurücklegen muss.
There was a Cave,
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
Wieso .ceil?? Dadurch wirds doch wieder zum Integer.
Zitat
![]()
Ruby Quellcode
1 @pixelfly[0], @pixelfly[1] = (deltax/(frames.to_f())).ceil(), (deltay/(frames.to_f())).ceil()
Machs doch einfach so wie ich gesagt habe v_v
Ähnliche Themen
-
Skript-Anfragen »-
Sripte erst nach bestimmter Zeit ausführen?
(2. April 2010, 03:32)
-
Skript-Anfragen »-
Suche Jahreszeiten Script
(31. März 2010, 19:33)
-
Skript-Anfragen »-
Battle Animation Priorität ändern?
(21. September 2009, 22:59)
-
RGSS 1 Probleme & Talk »-
Die Zeit, Bewegungen und Wait
(25. Oktober 2008, 13:48)
-
Skript-Anfragen »-
Bilder über Skript anzeigen lassen
(7. Oktober 2007, 20:35)



