Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

13.01.2006, 10:34

Zitat von »"nix da"«

nix da

Zu Deiner Frage: Wie meinst Du das "nur zum Teil"? Also das Du so was wie ein Raptor/Tyrian coden willst ist mir jetzt klar, aber was mit "Zum Teil"?


naja, ich kann das bild ja nicht über den rand blitten z.b. y = -100
da mekert er und schmeißt mich aus dem Programm raus, da
drawEx einen fehler verursacht hat.

deswegen muss ich das bild stück für stück blitten, sprich wenn das bild
100 Pixel Hoch ist, so teile ich es es in 100 Stücke auf und blitte dann

...
Stück 95
Stück 96
Stück 97
Stück 98
Stück 99

somit sieht es aus, als wenn der gegner aus dem oberen rand kommen würde.

oder kann man die drawEx funktion so umschreiben, das ich ruhig bilder über bzw. außerhalb des sichtbaren randes blitten kann, ohne das er mir abschmiert ?

Anonymous

unregistriert

12

13.01.2006, 10:55

m3n70r
Du kannst sie umschreiben ;) Nach dem Cullingtest wird ja das Tile zugeschnitten auf die richtige Größe. Nach dem Zuschneiden testest Du noch mal ob auch alles korrekt ist, wenn nicht: Brich die Funktion ab.

13

13.01.2006, 11:01

EDIT: ok ok, hat sich mal wieder von alleine geklärt, aber vielen dank für den tipp

Anonymous

unregistriert

14

13.01.2006, 11:33

m3n70r
Wenn es klappt poste doch einfach mal den Code der drawEx, ggf. kann ich da noch was optimieren :) :huhu:

15

13.01.2006, 12:33

so, nun gehts:

folgendermaßen habe ich es gelöst.

drawEx muss um (hier nur für die X Position) erweitert werden.
XX = Position des Bildes;


Quellcode

1
2
void drawEx   (long x, long y, unsigned long tilex, unsigned long tiley, 
                                   unsigned long tilew, unsigned long tileh, long XX);


und das habe ich in der Funktion erweitert:


Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...
static int tilexw = 0;
...


if(XX < 0)
    {
        x = 0;
        tilexw = tilex+tilew;
        tilex = XX*(-1);
    }
    else
    {
        tilexw = tilex+tilew - XX;
    }
        
    
    // Das Rechteck 
    ::RECT rc = { tilex, tiley, tilexw, tiley+tileh };


das wars... jetzt fehlt nur noch für die Y Position, aber das dürfte ja nicht so schwer sein

EDIT:: nicht vergessen, dass (bild auserhalb eines randes anzeigen, oder auch abschneiden) geht bisher nur mit nicht Animierten bildern.
aber das dürfte ja eigentlich auch net so schwer sein, nur paar variablen mit einen + verbinden ^^

EDIT2:: Der aufruf bzw. malen eines bildes sieht dann folgendermaßen aus

Beispiel: Crosshair wenn man es nach ganz rechts bewegt
posx = ist klar :)
posy = auch klar
iwidth = länge des bildes
width = gesamtlänge der Anwednung

Quellcode

1
2
3
4
if((crosshair_posx+crosshair_iwidth) >= width)
crosshair_.drawEx(crosshair_posx, crosshair_posy, 0, 0, 24, 24, (crosshair_posx+crosshair_iwidth) - width);
else
crosshair_.drawEx(crosshair_posx, crosshair_posy,0,0,24,24, 0);

16

13.01.2006, 15:34

so, nun meine letzte frage:

ich möchte von einer startposition in eine Endposition etwas blitten (z.B. einen Schuß).
stellen wir uns mal vor, ich habe einen Panzer genau mittig zur Programmbreite und ganz unten angeordnet.

möchte nun (wenn ich mit der linken maustaste klicke) einen schuß abgeben,
der pixel für pixel in die jeweilige endzone sich hinbewegt.
startposx = 300
startposy = 470

endposx = 150
endposy = 73

wie berechne ich nun anhand der differenz um wie viele pixel ich
das bild um x und y blitten muss ?
Problem ist, das ich keine werte unter 1 angeben kann.
Sprich bei 0.5f bewegt er sich nicht ein stück :(

Kann mir da jemand helfen ?

Anonymous

unregistriert

17

13.01.2006, 16:22

m3n70r
Tipp: Lineare Funktionen ;) Errechne die Steigung ;)

18

17.01.2006, 08:05

so, da bin ich wieder mit meinen Fragen.
Und zwar würde ich gerne wissen, wie man am besten Schüße realisiert.
Sprich ich habe 1 Bild (schuss.bmp) und würde gerne per mausklick
mehrere (die selben) auf einmal schießen wollen (eine art Rapidfire).
Wie kann man sowas realisieren ?
Muss ich dazu z.B. 10 Instanzen vom Bitmap erstellen und immer z.B. mit einem Abstand von 10 Pixel abfeuern ? muss ich dann
core::bitmap shot_;
core::bitmap shot1_;
core::bitmap shot2_;
usw. machen, oder geht das auch besser ?
schließlich muss ich später ja eine kolisionsabfrage machen, das wird bei 10 Bitmaps etwas aufwendig.

mfg M3n70r

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

19

17.01.2006, 13:19

Naja, wenn Du 10 Bitmaps anlegen würdest, hättest Du ja 10x denselben Scheiss im Speicher stehen, also lass das lieber. Es reicht, wenn Du die Bitmap ein einziges Mal im Speicher hast und dann einfach 10x auf dem Bildschirm ausgibst -- an verschiedenen Positionen versteht sich. Was Du allerdings schon hast, sind 10 Instanzen Deiner Klasse bzw. Struktur für Schüsse, auf denen dann auch die Kollisionschecks durchgeführt werden. Diese Instanzen besitzen aber -- wie gesagt -- nicht jeweils eine Instanz der Bitmap, sondern lediglich eine Referenz auf die eine Instanz der Bitmap.

20

18.01.2006, 10:04

alles klar, geht wunderbar.

ich habe mich mal nach Transparenz oder auch Alpha umgeguckt und dank der suche
auch antworten gefunden, jedoch weiß ich nicht, wie ich es in mein Code
packen kann und wie es es dann anwende.

folgendermaßen erstelle ich mein Objekt:

::IDirectDraw7* directdraw7_;

sowas wie: SetRenderState etc. habe ich nirgends gefunden.
liegt es an directdraw7 ?
wenn ja, wie kann ich ohne großartig den code zu ändern auf directdraw 8 oder 9 umsteigen ? natürlich nur, wenn es wirklich an 7 liegt ^^


oder andere frage: Wie bekomme ich einen vernünftigen Verlauf hin ?
meine Transparenzfarbe (Colorkey) ist auf Lila eingestellt.
Nun will ich z.B. ein Raytrace oder was auch immer hinzeichnen.
Also bastel ich mir ein bild mit der hintergrundfarbe Lila und das
Raytrace (von der mitte aus nach außen). Blitte ich nun das bild,
so wird natürlich nur der ganze wert von Lila transparent, was ja klar ist,
aber wie kann man das besser lösen, das z.B. von Lila -> Hell Gelb alles transparent ist ???

würde mich wie immer über eine antwort sehr freuen.


mfg M3n70r

Werbeanzeige