AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte [GAME] Bloggy [ALPHA Version 0.6] (Multiplayer.?.)
Thema durchsuchen
Ansicht
Themen-Optionen

[GAME] Bloggy [ALPHA Version 0.6] (Multiplayer.?.)

Ein Thema von olee · begonnen am 26. Feb 2008 · letzter Beitrag vom 5. Mär 2008
Antwort Antwort
Seite 7 von 7   « Erste     567   
Benutzerbild von olee
olee
Registriert seit: 16. Feb 2008
Hi erst mal an alle Delphi Fans

Ich möchte an dieser Stelle mein neustes Projekt vorstellen:
--> "Bloggy - The epic adventure" (Der Titel ist noch nicht sicher)

Es ist eine Mischung aus einem Jump 'en Run Game, einem Multiplayer Game und nem Race Game.

Grundidee des Spiels ist es, von einem Start zum Ziel zu kommen.

Klingt einfach ... ist es aber NICHT !

Denn ein kleiner Fehltritt und ihr könnt von vorne anfangen.

Mehr will ich aber erst mal nicht verraten. 8)

Also testet einfach mal drauf los !

Ein paar Infos noch, bevor ihr startet:

-- Das Game ist noch nicht fertig also nicht wundern, dass einige Sachen fehlen

-- Springt einmal gegen die Blöcke und drückt dagegen, bzw. Springt mit SPACE von denen weg ^^

-- Bitte gebt ein Feedback mit Verbesserungsvorschlägen!

================================================== ======================================

Anleitung:
-- Tasten:
[ASDW] --> Bewegen
[LEERTASTE] --> Springen
[Q] (nur im Editor) --> Block an Position erstellen
[E] (nur im Editor) --> Block an Position löschen
Angehängte Dateien
Dateityp: zip game_774.zip (2,54 MB, 80x aufgerufen)
 
Benutzerbild von olee
olee

 
Turbo Delphi für Win32
 
#61
  Alt 4. Mär 2008, 22:15
@3_of_8 : Also bei mir lädt der das Bild nur in einen Pointer oder so. Hab keine ahnung, in welchem Format der das in dem Pointer speichert.

Delphi-Quellcode:
var
  FileHeader: TBITMAPFILEHEADER; // was FileHeader: BITMAPFILEHEADER; undeclared identifier
  InfoHeader: TBITMAPINFOHEADER; // was InfoHeader: BITMAPINFOHEADER; undeclared identifier
  Palette: array [byte] of TRGBQUAD; // Palette: array of RGBQUAD; declaration of array not supported by D2 and undeclared identifier RGBQUAD
  BitmapFile: THandle;
  BitmapLength: Integer; // changed from variant
  PaletteLength: Integer; // '' '' ''
  ReadBytes: Integer; // changed for incompatibility whith declaration of Win function Readfile
  Front: ^Byte;
  Back: ^Byte;
  Temp: Byte;
  I : Integer;
  Width, Height : Integer;
  pData : Pointer;

  // used for loading from resource
  ResStream : TResourceStream;
begin

[.....................]
    BitmapFile := CreateFile(PChar(Filename), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
    if (BitmapFile = INVALID_HANDLE_VALUE) then begin
      MessageBox(0, PChar('Error opening ' + Filename), PChar('BMP Unit'), MB_OK);
      Exit;
    end;

    // Get header information
    ReadFile(BitmapFile, FileHeader, SizeOf(FileHeader), ReadBytes, nil);
    ReadFile(BitmapFile, InfoHeader, SizeOf(InfoHeader), ReadBytes, nil);

    // Get palette
    PaletteLength := InfoHeader.biClrUsed;
    //SetLength(Palette, PaletteLength); commented by fabrizio ( i don't know how to solve !!)
    ReadFile(BitmapFile, Palette, PaletteLength, ReadBytes, nil);
    if (ReadBytes <> PaletteLength) then begin
      MessageBox(0, PChar('Error reading palette'), PChar('BMP Unit'), MB_OK);
      Exit;
    end;

    Width := InfoHeader.biWidth;
    Height := InfoHeader.biHeight;
    BitmapLength := InfoHeader.biSizeImage;
    if BitmapLength = 0 then
      BitmapLength := Width * Height * InfoHeader.biBitCount Div 8;

    // Get the actual pixel data
    GetMem(pData, BitmapLength);
    ReadFile(BitmapFile, pData^, BitmapLength, ReadBytes, nil);
    if (ReadBytes <> BitmapLength) then begin
      MessageBox(0, PChar('Error reading bitmap data'), PChar('BMP Unit'), MB_OK);
      Exit;
    end;
    CloseHandle(BitmapFile);
  end;

  // Bitmaps are stored BGR and not RGB, so swap the R and B bytes.
  for I :=0 to Width * Height - 1 do
  begin
    Front := Pointer(Integer(pData) + I*3);
    Back := Pointer(Integer(pData) + I*3 + 2);
    Temp := Front^;
    Front^ := Back^;
    Back^ := Temp;
  end;
Hier mal der relevante Code der laden-funktion.
Björn Zeutzheim
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

 
Turbo Delphi für Win32
 
#62
  Alt 4. Mär 2008, 22:38
Da stehts doch eh: Die Daten sind im RGB-Format, jeder Kanal ein Byte, an der Stelle deines Pointers.

Der Code dafür ist ungefähr so:
Delphi-Quellcode:
for I:=0 to Width-1 do
  for J:=0 to Height-1 do
    for K:=0 to 2 do
      PByte(Cardinal(Buffer)+(J*Width+I)*3+K):=
          PByte(Cardinal(pData)+((Height-J-1)*Width+I)*3+K);
(Das hättest du aber mit etwas Eigeninitiative auch hinbekommen sollen, es sei denn, was ich nicht hoffe, du hast dein Spiel bisher nur per Copy & Paste geschrieben)
Manuel Eberl
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

 
Turbo Delphi für Win32
 
#63
  Alt 4. Mär 2008, 22:44
Erst mal danke für die schnelle Antwort.

An so was wie du geschrieben hatst hab ich auch schon gedacht kam aber nit weiter.

--> Was ist denn dan Buffer in deinem Code?

--> Ich kenne mich in diesem Gebiet leider nicht si aus. Könntest du mir vllt. da eine kleine Hilfestellung geben?
Björn Zeutzheim
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

 
Turbo Delphi für Win32
 
#64
  Alt 4. Mär 2008, 22:53
Buffer ist ein Pointer, den du mit GetMem intialisierst. GetMem übergibst du die Menge Speicher, die du haben willst, also Breite*Höhe*3 (Weil 3 Bytes pro Pixel)

Wenn du dich auf dem Gebiet nicht auskennst, solltest du das schnell ändern - Pointer sind nämlich ein wichtiger Bestandteil der Sprache Delphi, und auch das Speichermanagement sollte man zumindest bedienen können. OpenGL ohne Kentnisse über Pointer zu benutzen ist außerdem so gut wie unmöglich. Wenn du ein Vertex-Array übergeben willst, wenn du eine Matrix in den Grafikspeicher laden willst, sogar, wenn du nur eine Textur laden willst, brauchst du Pointer. Und wenn du damit nicht umgehen kannst, dann kannst du tatsächlich nur durch Copy & Paste soweit gekommen sein, wie du jetzt bist.
Manuel Eberl
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

 
Turbo Delphi für Win32
 
#65
  Alt 4. Mär 2008, 22:56
EDIT: Erledigt
Björn Zeutzheim
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

 
Turbo Delphi für Win32
 
#66
  Alt 5. Mär 2008, 00:42
So ich habe die Lösung gefunden.

Für alle die auch so ein Problem haben sollten hier der Code, um ein Bild in einem Pointer mit Type Byte zu spiegeln.

Delphi-Quellcode:
Var
  I,J,p : Integer;
  InvData : Array [0..256,0..1,0..2] of ^Byte;
  TMP : Array [0..256,0..2] of Byte;
  pData : Pointer;

  [...........]

  for I := 0 to (Width div 2) do
  begin
    for J := 0 to Height-1 do
    begin
      InvData[j,0,0] := (Pointer(Integer(pData) + I*Width*3 + J*3 + 0));
      InvData[j,0,1] := (Pointer(Integer(pData) + I*Width*3 + J*3 + 1));
      InvData[j,0,2] := (Pointer(Integer(pData) + I*Width*3 + J*3 + 2));

      InvData[j,1,0] := (Pointer((Integer(pData) + (Width-i)*Width*3 + j*3 + 0)));
      InvData[j,1,1] := (Pointer((Integer(pData) + (Width-i)*Width*3 + j*3 + 1)));
      InvData[j,1,2] := (Pointer((Integer(pData) + (Width-i)*Width*3 + j*3 + 2)));

      TMP[j,0] := InvData[j,0,0]^;
      TMP[j,1] := InvData[j,0,1]^;
      TMP[j,2] := InvData[j,0,2]^;

      InvData[j,0,0]^ := InvData[j,1,0]^;
      InvData[j,0,1]^ := InvData[j,1,1]^;
      InvData[j,0,2]^ := InvData[j,1,2]^;

      InvData[j,1,0]^ := TMP[j,0];
      InvData[j,1,1]^ := TMP[j,1];
      InvData[j,1,2]^ := TMP[j,2];
    end;
  end;
Björn Zeutzheim
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

 
Turbo Delphi für Win32
 
#67
  Alt 5. Mär 2008, 01:38
So jetzt hole ich endlich wieder eine neue Version aus meiner Programmierstube.

Es haben sich nochmal einige kleinigkeiten verändert.

Der Multiplayer-Modus ist zwar noch nicht fertig, aber schon im Spiel integriert. Wer also den mal testen will, kann das mal versuchen.

MFG
Björn
Angehängte Grafiken
Dateityp: bmp multiplayer_preview_110.bmp (1,72 MB, 11x aufgerufen)
Angehängte Dateien
Dateityp: zip game_189.zip (2,52 MB, 3x aufgerufen)
Björn Zeutzheim
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 7 von 7   « Erste     567   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz