Kompass Skript
Hallo,
ich bin auf der Suche nach einem Kompass-Skript mit folgender Funktionalität:
- wahlweises Anzeige einer Kompassrose mit Kompassnadel auf der Karte, z.B. in der rechten oberen Ecke
- Kompassnadel zeigt vom Spieler aus gesehen in die Richtung eines definierten Punktes der Karte
Vielen Dank für alle Informationen.
Marco.
ich bin auf der Suche nach einem Kompass-Skript mit folgender Funktionalität:
- wahlweises Anzeige einer Kompassrose mit Kompassnadel auf der Karte, z.B. in der rechten oberen Ecke
- Kompassnadel zeigt vom Spieler aus gesehen in die Richtung eines definierten Punktes der Karte
Vielen Dank für alle Informationen.
Marco.
Vielen Dank für jede Information.
Marco
Marco
War noch ne Woche und ich hab mein Script fertig, bin nämlich gerade daran so eins zu Scripten... Leide nur gerade leider an chronischem Zeitmangel.
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
Das sollte eigentlich bald in der Scriptdatabase erscheinen, aba ich kanns dir ja torztdme mal hier posten.
Schön in den Credits erwähnen ;-) und wenn was bugt, melden!
Schön in den Credits erwähnen ;-) und wenn was bugt, melden!
|
|
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 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 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 |
# #=============================| # Minimapscript v.1.0 | #=============================| # #------------------------------| # Credits: | # Bitmap.draw_circle: By Saiko | # Rest: By Hindi | #------------------------------| # # #------------------------------------------------------------------------------- # Beschreibung: #------------------------------------------------------------------------------- =begin Dieses RGSS Skript erzeugt eine Minimap. Um es zu nutzen müsst ihr es zunächst im Script Editor oberhalb der Main einfügen. Anschließent könnt ihr mit dem Eventbefehl "Script" folgenden Code mit Parameter einfügen: Leichter Code: Mini.map.anzeigen_easy(x, y, width, height, zoom[, style]) Forgeschritten: Mini.map.anzeigen(rect, zoom[, style]) Es ist relativ egal, welchen der beiden Codes ihr hernehmt, im Forgeschrittenen ist der einzigste unterschied, dass ihr ein Rect erstellen müsst, im einfach wird hingegen einfach ein Rect von selbst erstellt. =end # # # #------------------------------------------------------------------------------- # Anleitugn: #------------------------------------------------------------------------------- =begin erstmal mich (Hindi) für das Minimap Script und Saiko für das draw_circle Script, in den Credits erwähnen, dann: =end =begin Zur Minimap: Als Beispiel will ich den leichten Code nehmen: Mini.map.anzeigen_easy(x, y, width, height, zoom[, style]) Hier stehen X und Y für die Koordinaten wo ihr die Minimap anzeigen lassen wollt. Width und height, müsst ihr standartgemäß auf 0 stellen, es sei denn, ihr wollt einen kleinen Radar erstellen, denn dann könnt ihr damit die größe der Minimap bestimmen. Zomm bestimmt die größe der Minimap in jedem Falle. Die Minimap ist im Standart genau so groß wie die richtige Map. Der zoom wird in % angegeben... So wollt ihr 30% der orginal größe, so müsst ihr 0.3 einsetzen. Style ist standartgemäß auf 1 gestellt, d.h. es wird der Style "normal" angezeigt, wollt ihr einen anderen Style, dann setzt dort eine andere Zahl ein. Im moment gibt es bei dieser Version nur einen 2. Style (ihr könnt nur als alternative die Zahl 2 einsetzen). Weitere befehle: Mit Mini.map.zoom(zoom_x, zoom_y) könnt ihr auf der X und Y Achse die Größe der Minimap verändern. Mit Mini.map.mini könnt ihr abfragen ob die Minimap angezeigt wird, es wird True oder False zurrück gegeben. Mit Mini.map.viewport_on könnt ihr abfragen ob gerade ein Radar angezeigt wird oder die ganze Map. Fals der Radar angezeigt wird, wird True returnt, andernfalls False. Mit Mini.map.dispose könnt ihr die Minimap wieder verschwinden lassen. Zu Missionen: Mit Mini.map.add_mission(x, y[, id]) könnt ihr auf der Minimap einen Punkt auf der Koordinate X und Y anzeigen lassen. ID könnt ihr optional mit einer ID von einem Event ersetzen, dessen X und Y Koordinate wird dann auf der Minimap Grau angezeigt. Mit Mini.map.sub_mission(x, y[, id]) könnt ihr einen Missionspunkt von der Minimap verschwinden lassen, mit X, Y und ID müsst ihr das selbe machen wie bei add_mission schon beschriebenen. Mit Mini.map.aktiv_mission?(x, y[, id]) Überprüft ihr ob auf X, Y gerade ein Missionspunkt ist. X, Y und ID sind wieder mit dem selben zu ersetzen wie bei den beiden vorherigen Erleuterungen. =end # # #------------------------------------------------------------------------------- # Game_Map: #------------------------------------------------------------------------------- class Game_Map attr_accessor :map def field_passable?(x, y, d, self_event = nil) return $game_map.passable?(x, y, d, self_event) end end #------------------------------------------------------------------------------- # Interpreter: #------------------------------------------------------------------------------- class Interpreter alias minimap_update command_201 def command_201 minimap_update Mini.map.update if Mini.map.mini end end #------------------------------------------------------------------------------- # Game_Player: #------------------------------------------------------------------------------- class Game_Player alias minimap_update update def update minimap_update Mini.map.update if Input.dir4 != 0 && Mini.map.mini end end #------------------------------------------------------------------------------- # Bitmap: #------------------------------------------------------------------------------- class Bitmap def draw_circle(ox, oy, r, color) r.times do |x| y = r - Math.sqrt((r / 2.0) ** 2 - (x - r / 2.0) ** 2) - r self.fill_rect(ox + x - r / 2, oy + y, 1, -y * 2, color) end end end #------------------------------------------------------------------------------- # Minimap: #------------------------------------------------------------------------------- class Minimap # mini == true fals die Minimap angezeigt wird # mission == true fals eine Mission aktiv ist attr_reader :mini, :viewport_on attr_accessor :mission def anzeigen_easy(x, y, width, height, zoom, style=1) rect = Rect.new(x, y, width, height) anzeigen(rect, zoom, style) end def anzeigen(rect, zoom, style=1) @style = style # Pfad des Tiles @pfad = RPG::Cache.tileset($game_map.tileset_name) @pfad_autotiles = Array.new for i in 0..6 @pfad_autotiles[i] = RPG::Cache.autotile($game_map.autotile_names[i]) end zoom_x, zoom_y = zoom, zoom @mini = true # Arrays erstellen # Alle wichtigen Variablen @map_width, @map_height = $game_map.map.width, $game_map.height @zoom_x, @zoom_y = zoom_x, zoom_y @x, @y = rect.x, rect.y @rect = rect # Missionen Table erstellen @missionen = Table.new(@map_width, @map_height) # Erstelle den Viewport if rect.width != 0 && rect.height != 0 @viewport_on = true @viewport = Viewport.new(rect) else @viewport_on = false @viewport = Viewport.new(rect.x, rect.y, @map_width * 32, @map_height * 32) end # Erstelle die Farben @blue_hell = Color.new( 50, 50, 255, 100) @blue_dunkel = Color.new( 0, 0, 100, 200) @red = Color.new(255, 0, 0, 200) @green = Color.new( 0, 255, 0, 200) @weiss = Color.new( 0, 0, 0, 255) @grau = Color.new(100, 100, 100) # Erstelle den Playerpunkt @player = Sprite.new @player.z = 1 @player.bitmap = Bitmap.new(32, 32) @player.bitmap.draw_circle(16, 16, 32, @red) @player.zoom_x = @zoom_x @player.zoom_y = @zoom_y # Erstelle die Minimap @minimap = Sprite.new(@viewport) @minimap.bitmap = Bitmap.new(@map_width * 32, @map_height * 32) show_minimap(style) update end def update show_minimap(@style) update_mission # Pfad des Tiles @pfad = RPG::Cache.tileset($game_map.tileset_name) if @viewport_on else # Berechnen der X und Y Koordinaten des Helden x = $game_player.x * 32 * @zoom_x y = $game_player.y * 32 * @zoom_y # Setzt den Playerpunkt neu @player.x = @rect.x * 2 + x @player.y = @rect.y * 2 + y end end def show_minimap(style) @minimap.bitmap.clear if @minimap.bitmap != nil # Erstellen der Minimap @minimap.x = @rect.x @minimap.y = @rect.y @minimap.zoom_x = @zoom_x @minimap.zoom_y = @zoom_y # Setzte die Minimap und den Playerpunkt an die richtige Stelle if @viewport_on == true @player.x = @rect.x + @rect.width / 2 @player.y = @rect.y + @rect.height / 2 x, y = $game_player.x * 32 * @zoom_x, $game_player.y * 32 * @zoom_y @minimap.x = @player.x - x - @rect.x @minimap.y = @player.y - y - @rect.y end case style when 1 normal #<= Style "normal" aufrufen when 2 classic #<= Style "classic" aufrufen end # Setzte die Eventpunkte for i in $game_map.events.keys x, y = $game_map.events[i].x * 32 * @zoom_x, $game_map.events[i].y * 32 * @zoom_y @minimap.bitmap.draw_circle(events_x(i), events_y(i), 16, @green) if @viewport_on == true @minimap.bitmap.draw_circle(@rect.x + x * 32, @rect.y + y * 32, 16, @green) if @viewport_on == false end end # Minimap im Normal - Style def normal @minimap.opacity = 200 for x in 0..@map_width for y in 0..@map_height for z in 0..2 if $game_map.data[x, y, z] != nil if $game_map.data[x, y, z] >= 384 var = $game_map.data[x, y, z] - 384 xx, yy = var % 8, var / 8 @minimap.bitmap.blt(x * 32, y * 32, @pfad, Rect.new(xx * 32, yy * 32, 32, 32)) end end end end end end # Minimap im Classic - Style def classic for xx in 0..@map_width for yy in 0..@map_height if $game_map.field_passable?(xx, yy, 0) @minimap.bitmap.fill_rect(xx * 32, yy * 32, 32, 32, @blue_hell) else @minimap.bitmap.fill_rect(xx * 32, yy * 32, 32, 32, @blue_dunkel) end end end end # Gibt X - Achse zurrück def events_x(i) x = $game_map.events[i].x return @rect.x + (x * 32) end # Gibt Y - Achse zurrück def events_y(i) y = $game_map.events[i].y return @rect.y + (y * 32) end # Verändert den Zoom def zoom(zoom_x, zoom_y) @minimap.zoom_x, @minimap.zoom_y = zoom_x, zoom_y @player.zoom_x, @player.zoom_y = zoom_x, zoom_y @events.zoom_x, @events.zoom_y = zoom_x, zoom_y end # Dispose alle Bilder die durch dieses Modul erzeugt wurden def dispose @mini = false # <= Minimap wird angezeigt == false @minimap.bitmap.dispose # <= Dispose Minimap @player.bitmap.dispose # <= Dispose Playerpunkt end #----------------------------------------------------------------------------- # Autotiles: #----------------------------------------------------------------------------- def autotiles(x, y, z) t_x = nil if $game_map.data[x, y, z] < 384 && $game_map.data[x, y, z] >= 336 t_x = 6 sub = $game_map.data[x, y, z] - 384 + 96 - 48 elsif $game_map.data[x, y, z] < 336 && $game_map.data[x, y, z] >= 288 t_x = 5 sub = $game_map.data[x, y, z] - 336 + 96 - 48 elsif $game_map.data[x, y, z] < 288 && $game_map.data[x, y, z] >= 240 t_x = 4 sub = $game_map.data[x, y, z] - 288 + 96 - 48 elsif $game_map.data[x, y, z] < 240 && $game_map.data[x, y, z] >= 192 t_x = 3 sub = $game_map.data[x, y, z] - 240 + 96 - 48 elsif $game_map.data[x, y, z] < 192 && $game_map.data[x, y, z] >= 144 t_x = 2 sub = $game_map.data[x, y, z] - 192 + 96 - 48 elsif $game_map.data[x, y, z] < 144 && $game_map.data[x, y, z] >= 96 t_x = 1 sub = $game_map.data[x, y, z] - 144 + 96 - 48 elsif $game_map.data[x, y, z] < 96 && $game_map.data[x, y, z] >= 48 t_x = 0 sub = $game_map.data[x, y, z] - 96 + 96 - 48 end pfad = @pfad_autotiles[t_x] if t_x != nil x1, x2, x3, x4 = nil, nil, nil, nil y1, y2, y3, y4 = nil, nil, nil, nil case sub when 0 x1, x2, x3, x4 = 1, 1.5, 1, 1.5 y1, y2, y3, y4 = 2, 2, 2.5, 2.5 when 1 x1, x2, x3, x4 = 2, 1.5, 1, 1.5 y1, y2, y3, y4 = 0, 2, 2.5, 2.5 when 2 x1, x2, x3, x4 = 1, 2.5, 1, 1.5 y1, y2, y3, y4 = 2, 0, 2.5, 2.5 when 3 x1, x2, x3, x4 = 2, 2.5, 1, 1.5 y1, y2, y3, y4 = 0, 0, 2.5, 2.5 when 4 x1, x2, x3, x4 = 1, 1.5, 1, 2.5 y1, y2, y3, y4 = 2, 2, 2.5, 0.5 when 5 x1, x2, x3, x4 = 2, 1.5, 1, 2.5 y1, y2, y3, y4 = 0, 2, 2.5, 0.5 when 6 x1, x2, x3, x4 = 1, 2.5, 1, 2.5 y1, y2, y3, y4 = 2, 0, 2.5, 0.5 when 7 x1, x2, x3, x4 = 2, 2.5, 1, 2.5 y1, y2, y3, y4 = 0, 0, 2.5, 0.5 when 8 x1, x2, x3, x4 = 1, 1.5, 1, 1.5 y1, y2, y3, y4 = 2, 2, 2.5, 2.5 when 9 x1, x2, x3, x4 = 1, 1.5, 2, 1.5 y1, y2, y3, y4 = 2, 2, 0.5, 2.5 when 10 x1, x2, x3, x4 = 2, 1.5, 2, 1.5 y1, y2, y3, y4 = 0, 2, 0.5, 2.5 when 11 x1, x2, x3, x4 = 1, 2.5, 2, 1.5 y1, y2, y3, y4 = 2, 0, 0.5, 2.5 when 12 x1, x2, x3, x4 = 1, 1.5, 1, 1.5 y1, y2, y3, y4 = 2, 2, 2.5, 2.5 end if pfad != nil @minimap.bitmap.blt(x * 32, y * 32, pfad, Rect.new(x1 * 32, y1 * 32, 16, 16)) if x1 != nil @minimap.bitmap.blt(x * 32 + 16, y * 32, pfad, Rect.new(x2 * 32, y2 * 32, 16, 16)) if x2 != nil @minimap.bitmap.blt(x * 32, y * 32 + 16, pfad, Rect.new(x3 * 32, y3 * 32, 16, 16)) if x3 != nil @minimap.bitmap.blt(x * 32 + 16, y * 32 + 16, pfad, Rect.new(x4 * 32, y4 * 32, 16, 16)) if x4 != nil end end #----------------------------------------------------------------------------- # Missionen: #----------------------------------------------------------------------------- # Missoin hinzufügen def add_mission(x, y, id=nil) if x == nil && y == nil x, y = $game_map.events[i].x, $game_map.events[i].y end @missionen[x, y] = 1 update_mission end # Mission enfernen def sub_mission(x, y, id=nil) if x == nil && y == nil x, y = $game_map.events[i].x, $game_map.events[i].y end @missionen[x, y] = 0 update end # Missionen updaten def update_mission for x in 0..@map_width for y in 0..@map_height if @missionen[x, y] == 1 if @viewport_on xx, yy = x * 32, y * 32 x = @rect.width if xx > @rect.height y = @rect.height if yy > @rect.height x += @minimap.x - @viewport.rect.x if @minimap.x - xx < @viewport.rect.x y = @rect.y if yy < @rect.y x += 32 y += 32 else x *= 32 y *= 32 end @minimap.bitmap.draw_circle(x + 16, y + 16, 32, @grau) end end end end # Überpfürft ob eine Mission auf X, Y aktiv ist def aktiv_mission?(x, y, id=nil) if x == nil && y == nil x, y = $game_map.events[i].x, $game_map.events[i].y end return @missionen[x, y] == 1 end end #------------------------------------------------------------------------------- # Modul in die, die Klasse "Minimap" gelegt wird: #------------------------------------------------------------------------------- module Mini class <<self attr_accessor :map end end # Öffnen der Minimap - Klasse Mini.map = Minimap.new if Mini.map == nil |
zum Lesen den Text mit der Maus markieren
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
|
|
Ruby Quellcode |
1 2 3 4 5 6 |
class Game_Map attr_accessor :map def field_passable?(x, y, d, self_event = nil) return $game_map.passable?(x, y, d, self_event) end end |
Macht das selbe wie die Methode "passable?", nur mit dem Unterschied, dass hier ein Bug entstehen kann. Du leitest auf eine Instanz dieser Klasse um, die genau das selbe tut, wobei es noch passieren kann, dass die Instanz nicht definiert wäre. Nenne deine Map z.B. mal nicht $game_map sondern $rgss_map oder so, dann funktzt der Code nicht. Streich die Methode...!
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 |
class Interpreter alias minimap_update command_201 def command_201 minimap_update Mini.map.update if Mini.map.mini end end |
Was soll das denn? Was hat der Interpreter mit dem Updaten zu tun??? Das gehört eher in Scene_Map oder Game_map... zumal command_201 teleportiert, wenn ich mich recht entsinne. Der Code wird auch NIE erreicht, da am Ende JEDES Commands ein "return(bool)" steht! Mapwechsel prüft man, indem sich die ID der Map ändert, oder eben nicht.
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 |
class Game_Player alias minimap_update update def update minimap_update Mini.map.update if Input.dir4 != 0 && Mini.map.mini end end |
Updatet dein Script die Positionen anderer Events also nicht?
|
|
Ruby Quellcode |
1 2 3 4 |
Leichter Code: Mini.map.anzeigen_easy(x, y, width, height, zoom[, style]) Forgeschritten: Mini.map.anzeigen(rect, zoom[, style]) |
Zwei Methoden...? Wozu hat Ruby seine tolle Möglichkeit, zu überladen???
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 |
def anzeigen(arg0,arg1,arg2=nil,arg3=nil,arg4=nil,arg5=nil) x = arg0.is_a?(Rect) ? arg0.x : arg0 y = arg0.is_a?(Rect) ? arg0.y : arg1 w = arg0.is_a?(Rect) ? arg0.width : arg2 h = arg0.is_a?(Rect) ? arg0.height : arg3 z = arg0.is_a?(Rect) ? arg1 : arg4 s = arg0.is_a?(Rect) ? arg2 : arg5 if (!x.is_a?(Integer) || !y.is_a?(Integer) || !w.is_a?(Integer) || !h.is_a?(Integer) || !z.is_a?(Float) || (!s.is_a?(Integer) || s == nil)) raise(TypeError,"Hindi's Minimap-Script got a wrong parameter in Method 'anzeigen'.") end #Code end |
So braucht man nur eine einzige Methode...
|
|
Ruby Quellcode |
1 2 3 4 |
@pfad_autotiles = Array.new for i in 0..6 @pfad_autotiles[i] = RPG::Cache.autotile($game_map.autotile_names[i]) end |
EXPLIZIT DIE GRÖßE NENNEN, also Array.new(7)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
Ruby Quellcode |
1 |
zoom_x, zoom_y = zoom, zoom |
Eher so:
|
|
Ruby Quellcode |
1 |
zoom_x = zoom_y = zoom |
Und wozu überhaupt??? Verwende dierekt zoom!
|
|
Ruby Quellcode |
1 |
@zoom_x, @zoom_y = zoom_x, zoom_y |
Unnötig gedoppelt...
|
|
Ruby Quellcode |
1 |
@map_width, @map_height = $game_map.map.width, $game_map.height |
Wozu auslagern??? Speicherverschwendung!
|
|
Ruby Quellcode |
1 2 |
@x, @y = rect.x, rect.y @rect = rect |
Wieder unnötig gedoppelt...
|
|
Ruby Quellcode |
1 2 |
# Missionen Table erstellen @missionen = Table.new(@map_width, @map_height) |
Was für missionen...?
|
|
Ruby Quellcode |
1 2 3 4 5 6 |
@blue_hell = Color.new( 50, 50, 255, 100) @blue_dunkel = Color.new( 0, 0, 100, 200) @red = Color.new(255, 0, 0, 200) @green = Color.new( 0, 255, 0, 200) @weiss = Color.new( 0, 0, 0, 255) @grau = Color.new(100, 100, 100) |
Lass das DEnglisch sein... entscheide dich für eine Sprache...
|
|
Ruby Quellcode |
1 2 |
@player.bitmap = Bitmap.new(32, 32) @player.bitmap.draw_circle(16, 16, 32, @red) |
Du malst einen Kreis, der größer ist, als das Bitmap... macht Sinn...
|
|
Ruby Quellcode |
1 2 |
@player.zoom_x = @zoom_x @player.zoom_y = @zoom_y |
Jetzt auch noch dreifach???
|
|
Ruby Quellcode |
1 2 3 |
@pfad = RPG::Cache.tileset($game_map.tileset_name) if @viewport_on else |
@pfad hat nichts mit Pfad zu tun, das ist ein Bitmap... Und dein if-else sollte eher so aussehen:
|
|
Ruby Quellcode |
1 2 3 4 |
#So machen: if (!@viewport_on) #Oder so: unless (@viewport_on) |
Das if-else war Schwachsinn...
|
|
Ruby Quellcode |
1 |
@minimap.bitmap.clear if @minimap.bitmap != nil |
Wieso sollte sie da plötzlich nil werden?
|
|
Ruby Quellcode |
1 2 3 4 5 |
for i in $game_map.events.keys x, y = $game_map.events[i].x * 32 * @zoom_x, $game_map.events[i].y * 32 * @zoom_y @minimap.bitmap.draw_circle(events_x(i), events_y(i), 16, @green) if @viewport_on == true @minimap.bitmap.draw_circle(@rect.x + x * 32, @rect.y + y * 32, 16, @green) if @viewport_on == false end |
...
|
|
Ruby Quellcode |
1 2 3 4 5 6 |
$game_map.events.each_value() \ {|event| x,y = event.x*32*@zoom_x,event.y*32*@zoom_y @minimap.bitmap.draw_circle(@rect.x+event.x*32,@rect.y+event.y*32,16,@green) if (@viewport_on) @minimap.bitmap.draw_circle(@rect.x+x*32,@rect.y+y*32) if (!@viewport_on) } |
def zoom(zoom_x, zoom_y)
@minimap.zoom_x, @minimap.zoom_y = zoom_x, zoom_y
@player.zoom_x, @player.zoom_y = zoom_x, zoom_y
@events.zoom_x, @events.zoom_y = zoom_x, zoom_y
end
@minimap.zoom_x, @minimap.zoom_y = zoom_x, zoom_y
@player.zoom_x, @player.zoom_y = zoom_x, zoom_y
@events.zoom_x, @events.zoom_y = zoom_x, zoom_y
end
|
|
Ruby Quellcode |
1 2 |
@minimap.zoom_x = @player.zoom_x = @events.zoom_x = zoom_x @minimap_zoom_z = #... |
|
|
Ruby Quellcode |
1 |
def autotiles(x, y, z) |
Nenne die Variable NICHT "sub"!!! So heißt eine Methode des Kernel-Moduls! Also eine Methode bei der man nicht das Kernel davor tippen muss! Das ist so, als würde die Variable "print" heißen!
|
|
Ruby Quellcode |
1 2 3 4 5 |
module Mini class <<self attr_accessor :map end end |
Der sinnloseste Schwachsinn im ganzen Spript! Besser wäre so:
|
|
Ruby Quellcode |
1 |
$minimap = Minimap.new() |
Noch besser wäre:
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 |
class Scene_Map attr_accessor(:minimap) alias_method(:alt,:initialize) if (!method_defined?(:alt)) #Natürlich einen längeren Namen als "alt" def initialize() @minimap = Minimap.new() alt() end end |
Bei letzterem wäre der Aufruf:
|
|
Ruby Quellcode |
1 |
$scene.minimap.methode() if ($scene.is_a?(Scene_Map)) |
Nochwas: Gewöhn dir alias_method an, sonst verursachen deine Scripte noch SystemStackErors!!!!!
zum Lesen den Text mit der Maus markieren
Moment... hier wurde doch nach einem Kompass gefragt, der auf eine bestimmte Koordinate zeigen soll... allerdings zeigst du ein Minimapscript - Was völlig am Thema vorbei ist -, und obendrein nichtmal ansatzweise etwas Kompassähnliches bietet!
Nebenbei ist der Code auch noch stark Verbesserungswürdig...
Mach' deine Aufgabe nochmal und diesmal richtig. Sonntag, spätestens Montag schau ich mal wieder rein. Wenn dann kein Kopass da ist, setze ich mich mal hin. Vorher habe ich noch zu tun bzw. bin nicht im Stande, zu makern.
Und lade es erst auf Itzamná hoch, wenn die genannten Punkte verbessert wurden.
Und nimm's mir nicht übel, ich habe mir satte 30min Zeit genommen, um das Script zu analysieren, ist also alles Andere als böswillig.
Nebenbei ist der Code auch noch stark Verbesserungswürdig...
Mach' deine Aufgabe nochmal und diesmal richtig. Sonntag, spätestens Montag schau ich mal wieder rein. Wenn dann kein Kopass da ist, setze ich mich mal hin. Vorher habe ich noch zu tun bzw. bin nicht im Stande, zu makern.
Und lade es erst auf Itzamná hoch, wenn die genannten Punkte verbessert wurden.
Und nimm's mir nicht übel, ich habe mir satte 30min Zeit genommen, um das Script zu analysieren, ist also alles Andere als böswillig.
-
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.
Nunja, ich bin ein lernwilliger, junger Programmierer, daher nehme ich es dir sicher nicht übel, sondern bin froh dass es noch solche Leute gibt, die sich für solche wie mich noch so lang Zeit nehmen.
Du hast gefragt, was @missionen sein soll... Das speichert die Missionen ab, also die Punkte wo man hinsoll...
So und zu deinen Codes... Über die hälfte der Codes die du da geschrieben hast kenne ich nichtmal... Also währe es schlauer wenn du nächstes mal eher mal mehr über die Codes die du hier reinstellst erkären, als mein Script negativ zu kritisieren würdest... ich mein, was ist alias_method??? Kann man das essen???
Und, wird wahrscheinlich noch darauf hinauslaufen, dass du es schreiben musst, weil ich leide immer mehr an Zeitmangel.
Du hast gefragt, was @missionen sein soll... Das speichert die Missionen ab, also die Punkte wo man hinsoll...
So und zu deinen Codes... Über die hälfte der Codes die du da geschrieben hast kenne ich nichtmal... Also währe es schlauer wenn du nächstes mal eher mal mehr über die Codes die du hier reinstellst erkären, als mein Script negativ zu kritisieren würdest... ich mein, was ist alias_method??? Kann man das essen???
Und, wird wahrscheinlich noch darauf hinauslaufen, dass du es schreiben musst, weil ich leide immer mehr an Zeitmangel.
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
Ich möchte auch mal meinen Senf dazugeben^^.
@Hindi: Ich habe mal dein Script getestet - so schlecht ist es ja schonmal gar nicht. Aber jetzt kommt mein "Aber". Hast du dein Script auch mal getestet? Sobald die Original-Map mehr an Größe zunimmt, laggt das Script wie Sau. Bevor du dein Scirpt gepostet hättest, hättest du vorher mal mit größeres Maps testen sollen. Bei meiner Mini-Map für mein Game (zum Beispiel) sind somit noch einige Bugs durch intensiveres Testen ans Licht gekommen.
Was ich auch nicht so ganz verstehe, warum nutzt du die module-class zum Aufrufen deiner Minimap? Das erscheint mir nicht ganz logisch. Vielleicht solltest du noch einmal ein wenig Inspiration von den anderen Minimap-Scripts holen.
Wie lang hast du eigentlich insgesamt daran gearbeitet? Da mir die Kommentare für die Erklärung des Script in letzter Minuten hingewurschtelt erscheinen - viele Rechtschreib- und Grammatikfehler. In deinem Script habe ich dreimal "=begin" und "=end" gezählt - was nicht wirklich nach einem schönprogrammierten ordentlichen Script aussieht. Schaue dir dochmal die RPG-Maker-XP- oder SDK-Scripte an - schön gegliedert und durchschaubar.
Bevor ich jetzt aber hier nur rummeckere, möchte ich noch betonen, dass ich weiß das du es lernen möchtest und ich bin froh über jeden der sich dazu bereiterklärt jemandem zu helfen, auch wenn er womöglich keine oder wenig Zeit hat. Und ansonsten würde ich dir vielldicht raten, wenn du deine Minimap verbessern willst, komplett von vorne anzufangen und dir einen Zettel und Stift besorgst und einen Programmablaufplan erstellst oder dir vorher reichlich Gedanken machst, wie du die Minimap realisieren möchtest und dann anfängst zu programmieren.
Anonsten kann es nur Bergauf gehen und besser werden - soweit noch viel Erfolg.
~ Gruß Kenai
@Hindi: Ich habe mal dein Script getestet - so schlecht ist es ja schonmal gar nicht. Aber jetzt kommt mein "Aber". Hast du dein Script auch mal getestet? Sobald die Original-Map mehr an Größe zunimmt, laggt das Script wie Sau. Bevor du dein Scirpt gepostet hättest, hättest du vorher mal mit größeres Maps testen sollen. Bei meiner Mini-Map für mein Game (zum Beispiel) sind somit noch einige Bugs durch intensiveres Testen ans Licht gekommen.
Was ich auch nicht so ganz verstehe, warum nutzt du die module-class zum Aufrufen deiner Minimap? Das erscheint mir nicht ganz logisch. Vielleicht solltest du noch einmal ein wenig Inspiration von den anderen Minimap-Scripts holen.
Wie lang hast du eigentlich insgesamt daran gearbeitet? Da mir die Kommentare für die Erklärung des Script in letzter Minuten hingewurschtelt erscheinen - viele Rechtschreib- und Grammatikfehler. In deinem Script habe ich dreimal "=begin" und "=end" gezählt - was nicht wirklich nach einem schönprogrammierten ordentlichen Script aussieht. Schaue dir dochmal die RPG-Maker-XP- oder SDK-Scripte an - schön gegliedert und durchschaubar.
Bevor ich jetzt aber hier nur rummeckere, möchte ich noch betonen, dass ich weiß das du es lernen möchtest und ich bin froh über jeden der sich dazu bereiterklärt jemandem zu helfen, auch wenn er womöglich keine oder wenig Zeit hat. Und ansonsten würde ich dir vielldicht raten, wenn du deine Minimap verbessern willst, komplett von vorne anzufangen und dir einen Zettel und Stift besorgst und einen Programmablaufplan erstellst oder dir vorher reichlich Gedanken machst, wie du die Minimap realisieren möchtest und dann anfängst zu programmieren.
Anonsten kann es nur Bergauf gehen und besser werden - soweit noch viel Erfolg.
~ Gruß Kenai
-
NeuigkeitenSämtliche Projekte sind erst mal pausiert. Weitere Informationen findet ihr hier. (Stand: 21.12.2012). -
Cursal Engine (Jump and Run Engine)Mit Hilfe der Cursal Engine (RCE) ist es möglich auf ziemlich einfache Weise „Jump and Run“-Projekte im RPG Maker XP zu entwerfen. Das Anlegen basiert auf Installations- und Updatepaketen sowie reinen Archiven für fortgeschrittene Benutzer. Die Version 2 (CE2) befindet sich bereits in Entwicklung. Interessiert? Dann lade dir die neuste Version herunter ;3! -
AvatarDiese kleinen, netten und knuffigen Vögelchen nennen sich Hamachou und dürften einigen aus Skies of Arcadia bekannt sein. Ich habe diese Bilder weder selbst gezeichnet noch modelliert. Dennoch finde ich sie so knuffig, dass man sie einfach lieb haben muss und ich hoffe euch geht's genau so^^". Diese Grafiken sind wirklich rar und ich bin stolz sie im Web gefunden zu haben.
Ok, danke^^, ich werd mal sehen... Ich weis nur nicht wie ich es noch schneller machen will... also ohne laggs. Wo wir schon dabei sind^^, wie könnte ich das beschleunigen? Wie haben die es von Enterbrain geschafft, dass ihre Map nicht laggt???
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
Der größte Performance-Verlust kommt wohl ganz genau hier in Zeile 217:
Um so kleiner die Minimap ist, umso weniger fällt dieser Performance-Verlust auf. Wenn ich das richtig interpreteiere, lässt du die Mini-Map jeden Frame neu zeichnen. Bei der originalen Map von Enterbrain wird alles vorher Tile für Tile geladen und anschließend nur bewegt. Anders sollte/muss es bei deiner Mini-Map auch nicht sein.
Erstelle alle zu ladenden Grafiken am besten in einem Viewport (ist in der Help vom RMXP bestens erklärt) und lass sie nur bewegen, statt jedes mal ein Bitmap zu zeichnen. Aber auch hier gilt: Nicht zu viele Sprites erstellen - sparsam bleiben.
~ Gruß Kenai
|
|
Ruby Quellcode |
1 |
@minimap.bitmap.clear if @minimap.bitmap != nil |
Um so kleiner die Minimap ist, umso weniger fällt dieser Performance-Verlust auf. Wenn ich das richtig interpreteiere, lässt du die Mini-Map jeden Frame neu zeichnen. Bei der originalen Map von Enterbrain wird alles vorher Tile für Tile geladen und anschließend nur bewegt. Anders sollte/muss es bei deiner Mini-Map auch nicht sein.
Erstelle alle zu ladenden Grafiken am besten in einem Viewport (ist in der Help vom RMXP bestens erklärt) und lass sie nur bewegen, statt jedes mal ein Bitmap zu zeichnen. Aber auch hier gilt: Nicht zu viele Sprites erstellen - sparsam bleiben.
~ Gruß Kenai
-
NeuigkeitenSämtliche Projekte sind erst mal pausiert. Weitere Informationen findet ihr hier. (Stand: 21.12.2012). -
Cursal Engine (Jump and Run Engine)Mit Hilfe der Cursal Engine (RCE) ist es möglich auf ziemlich einfache Weise „Jump and Run“-Projekte im RPG Maker XP zu entwerfen. Das Anlegen basiert auf Installations- und Updatepaketen sowie reinen Archiven für fortgeschrittene Benutzer. Die Version 2 (CE2) befindet sich bereits in Entwicklung. Interessiert? Dann lade dir die neuste Version herunter ;3! -
AvatarDiese kleinen, netten und knuffigen Vögelchen nennen sich Hamachou und dürften einigen aus Skies of Arcadia bekannt sein. Ich habe diese Bilder weder selbst gezeichnet noch modelliert. Dennoch finde ich sie so knuffig, dass man sie einfach lieb haben muss und ich hoffe euch geht's genau so^^". Diese Grafiken sind wirklich rar und ich bin stolz sie im Web gefunden zu haben.
Das mit dem Viewport habe ich bei dem "Radar" gemacht, aber da lad ich die Grafik glaub auch jedesmal neu und nein, nicht bei jedem sondern nur wenn sich der Hero bewegt^^, aber ich werds mal so versuchen zu machen wie du es gesagt hast.
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
Ähnliche Themen
-
Aurora Hearts & Übermensch »-
Aurora Hearts TestCheck
(7. Juli 2008, 09:23)
-
Archiv Jobbörse »-
Cades Angelus sucht dicht ! Genau dich ! Interresse ? Dann schau vorbei !
(27. Oktober 2008, 13:01)
-
RGSS 1 Probleme & Talk »-
Skills verbinden
(17. Februar 2008, 23:42)


