![]() |
Anzeige:
|
|
|||||||
| Helfer & Tools Programme für und in XProfan und Fragen dazu. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 21.02.2009
Beiträge: 71
|
Unten das Sprite ist schwarz.
Oder geht so etwas nicht mit Prospeed? mfg Code:
block&=create("hnewpic",64,64,$000000)
StartPaint block&
usebrush 1,rgb(0,255,0)
ellipse 10,10,50,50
EndPaint
dim bereich#,64*64*4
height&=64
width&=64
bitmap_header
~GetDIBits(%hdc,block&,0,height&,bereich#,bmi#,0)
spriteplane&=LoadFileImage(bereich#)
Geändert von profanfan (09.03.2009 um 20:00 Uhr) |
|
|
|
|
|
|
#2 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.093
|
Nein, da ist LoadFileImage() falsch. Du musst LoadMemoryImage() verwenden. Aber du kannst nicht einfach nur Grafikdaten einladen. Der Bitmapheader gehört schon dazu. Eben eine Grafikdatei im Speicher, in deinem Fall dann BMP.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. Geändert von Frabbing (09.03.2009 um 16:48 Uhr) |
|
|
|
|
|
#3 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 21.02.2009
Beiträge: 71
|
Habe jetzt mit dem Bitmapheader gearbeitet, den ich bei mir überall als standart einsetze.
Es erscheinen nur 2 schwarze Vierecke. Sonst funktioniert alles, wenn ich 1 BMP-Bild einlade. Zeig mir mal, was ich falsch mache? Das ist der entscheidende Bereich: Code:
block&=create("hnewpic",64,64,$000000)
StartPaint block&
usebrush 1,rgb(0,255,0)
ellipse 10,10,50,50
EndPaint
width&=64
height&=64
bitmap_header
~GetDIBits(%hdc,block&,0,height&,bereich1#,bmi#,0)
spriteplane&=LoadMemoryImage(bereich1#,laenge&)
Code:
Declare neu&,x&,y&,z&,ende%,text$,background&,Fensterkopie1&,Fensterkopie2&,array1&,array2&,array3&,array4&,bereich#
Declare sprite1&,sprite2&,sprite3&,sprite4&,spriteplane&
declare dx&,dy&,cx&,bereich1#,laenge&,block&,height&,width&,bmi#
laenge&=64*64*4
Dim bereich#,laenge&
Dim bereich1#,laenge&
$I Prospeed_Funktionen.inc
$H Windows.ph
SetTrueColor 1
neu&=usedll("ProSpeed.dll")
string bereich#,0="bmps/Hintergrund.jpg"
background&=LoadFileImage(bereich#)
Windowtitle "Sprites Demo (1) / ProSpeed."
Window (%maxx/2-400),(%maxy/2-200)-800,600
cls
' *** Die Hintergrundsgrafik auf den Bildschirm kopieren
PaintImage(%HDC,0,0,800,400,background&,0,0,0)
' *** Die Hintergrundsgrafik in die profaninterne Kopie des Bildschirms kopieren
' *** So wird das Fenster wieder erneuert, wenn zeitweise Teile durch andere Fenster verdeckt wurden.
PaintImage(%HDC2,0,0,800,400,background&,0,0,0)
fensterkopie1&=CreateImage(%HDC,800,400)
fensterkopie2&=CreateImage(%HDC,800,400)
' *** Zwei Kopien des Bildschirms für das Sprite-Doublebuffering machen
PaintImage(fensterkopie1&,0,0,800,400,%HDC,0,0,0)
PaintImage(fensterkopie2&,0,0,800,400,%HDC,0,0,0)
block&=create("hnewpic",64,64,$000000)
StartPaint block&
usebrush 1,rgb(0,255,0)
ellipse 10,10,50,50
EndPaint
width&=64
height&=64
bitmap_header
~GetDIBits(%hdc,block&,0,height&,bereich1#,bmi#,0)
spriteplane&=LoadMemoryImage(bereich1#,laenge&)
ende%=0
dx&=100
dy&=100
sprite1&=InitSprite(spriteplane&,%HDC,fensterkopie1&,fensterkopie2&,0,0,64,64,1,1,0,dx&,dy&,4,4)
sprite2&=InitSprite(spriteplane&,%HDC,fensterkopie1&,fensterkopie2&,0,0,64,64,1,1,0,dx&+250,dy&,2,2)
WhileNot ende%
sleep 1
if isKey(2)
ende%=1
EndIf
if isKey(81)
dx&=dx&-1
EndIf
if isKey(69)
dx&=dx&+1
EndIf
if isKey(87)
dy&=dy&-1
EndIf
if isKey(83)
dy&=dy&+1
EndIf
movesprite(sprite1&,dx&,dy&)
cx&=collision(sprite1&,sprite2&,2,2)
if cx&=1
StartPaint %hwnd
DrawText 10,225,"colli"
endpaint
else
StartPaint %hwnd
DrawText 10,225," "
endpaint
endif
Wend
DeleteAllSprites()
FreeImage(background&)
FreeImage(spriteplane&)
FreeImage(fensterkopie1&)
FreeImage(fensterkopie2&)
freedll neu&
Dispose bereich#
Dispose bereich1#
END
proc bitmap_header
def &BI_RGB 0
def &DIB_RGB_COLORS 0
struct BITMAPINFOHEADER = \
biSize&, biWidth&, biHeight&, biPlanes%, biBitCount%, biCompression&, \
biSizeImage&, biXPelsPerMeter&, biYPelsPerMeter&, biClrUsed&, biClrImportant&
dim bmi#,BITMAPINFOHEADER
clear bmi#
with bmi#
.biSize& = sizeof(bmi#)
.biWidth& = width&
.biHeight& = height&
.biPlanes% = 1
.biBitCount% = 32
.biCompression& = &BI_RGB
.biSizeImage& = ((.biWidth& * .biBitCount% \ 8 - 1) | 3 + 1) * abs(.biHeight&)
endwith
endproc
Geändert von profanfan (09.03.2009 um 20:03 Uhr) |
|
|
|
|
|
#4 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.093
|
Du versuchst das zu kompliziert. Die ProSpeed kann selber Bildschirme erstellen, das würde ich nutzen.
Auch deine Methode Sprites zu bewegen ist fehlerhaft, daher geht das ganze System in die Knie. MoveSprite() bewegt Sprites selbstständig von A nach B. Wenn du Sprites kontinuierlich manuell setzen willst, mussst du SetSpritePos() benutzen. Schau dir das mal an: Code:
Declare neu&,x&,y&,z&,ende%,text$,background&,Fensterkopie1&,Fensterkopie2&,array1&,array2&,array3&,array4&,bereich#
Declare sprite1&,sprite2&,sprite3&,sprite4&,spriteplane&
declare dx&,dy&,cx&,bereich1#,laenge&,block&,height&,width&,bmi#
laenge&=64*64*4
Dim bereich#,laenge&
Dim bereich1#,laenge&
$I Prospeed_Funktionen.inc
$H Windows.ph
SetTrueColor 1
neu&=usedll("ProSpeed.dll")
string bereich#,0="bmps/Hintergrund.jpg"
background&=LoadFileImage(bereich#)
Windowtitle "Sprites Demo (1) / ProSpeed."
Window (%maxx/2-400),(%maxy/2-200)-800,600
cls
' *** Die Hintergrundsgrafik auf den Bildschirm kopieren
PaintImage(%HDC,0,0,800,400,background&,0,0,0)
' *** Die Hintergrundsgrafik in die profaninterne Kopie des Bildschirms kopieren
' *** So wird das Fenster wieder erneuert, wenn zeitweise Teile durch andere Fenster verdeckt wurden.
PaintImage(%HDC2,0,0,800,400,background&,0,0,0)
fensterkopie1&=CreateImage(%HDC,800,400)
fensterkopie2&=CreateImage(%HDC,800,400)
' *** Zwei Kopien des Bildschirms für das Sprite-Doublebuffering machen
PaintImage(fensterkopie1&,0,0,800,400,%HDC,0,0,0)
PaintImage(fensterkopie2&,0,0,800,400,%HDC,0,0,0)
spriteplane&=CreateImage(%hdc,64,64)
MCls 64,64
StartPaint -1
usebrush 1,rgb(0,255,0)
UsePen 1,1,RGB(0,0,1)
ellipse 10,10,50,50
PaintImage(spriteplane&,0,0,64,64,%hdc,0,0,-1)
EndPaint
ende%=0
dx&=100
dy&=100
sprite1&=InitSprite(spriteplane&,%HDC,fensterkopie1&,fensterkopie2&,0,0,64,64,1,1,0,dx&,dy&,4,4)
sprite2&=InitSprite(spriteplane&,%HDC,fensterkopie1&,fensterkopie2&,0,0,64,64,1,1,0,dx&+250,dy&,2,2)
movesprite(sprite1&,800,dy&)
WhileNot ende%
sleep 10
if isKey(2)
ende%=1
EndIf
if isKey(81)
dx&=dx&-1
EndIf
if isKey(69)
dx&=dx&+1
EndIf
if isKey(87)
dy&=dy&-1
EndIf
if isKey(83)
dy&=dy&+1
EndIf
cx&=collision(sprite1&,sprite2&,8,8)
if cx&=1
SetText %hwnd,"Kollidiert!!!"
else
SetText %hwnd,""
endif
Wend
DeleteAllSprites()
FreeImage(background&)
FreeImage(spriteplane&)
FreeImage(fensterkopie1&)
FreeImage(fensterkopie2&)
freedll neu&
Dispose bereich#
Dispose bereich1#
END
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#5 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.078
|
Bitte was könnte die Ursache für folgenden Fehler sein:
Zeile 17: Funktion unbekannt: LOADFILEIMAGE(
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3 |
|
|
|
|
|
|
#6 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.093
|
Du benutzt irgendwie die falsche Inc oder Dll...
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#7 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.078
|
Achso... das war schon alles für Version 3.0 ... Klappt jetzt prima, danke!
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3 |
|
|
|
|
|
#8 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 21.02.2009
Beiträge: 71
|
Jup, danke, wahrscheinlich denke ich hier zuviel. Weil ja vom ProSpeed viel abgenommen wird.
mfg Geändert von profanfan (10.03.2009 um 11:55 Uhr) |
|
|
|
|
|
#9 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 21.02.2009
Beiträge: 71
|
Wenn sich 2 Kollisionsrechtecke überschneiden, fängt ein unsichtbare Viereck an zu flackern in schwarzer Farbe und zwar, welches auf das andere zufährt.
Gibt es eine Möglichkeit, das komplette Bild(Screen 800x400) erst nach vorn zu bringen, wenn im Hintergrund alles erledigt ist? Kannst du einen Vorschlag machen? "PageFlip". mfg Geändert von profanfan (10.03.2009 um 15:51 Uhr) |
|
|
|
|
|
#10 (Direktlink) | |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.093
|
Zitat:
Das dürfte eigentlich nicht passieren und deutet eher auf ein Transparenzproblem hin. Passiert das in dem Code, den ich gepostet habe?
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. Geändert von Frabbing (10.03.2009 um 17:01 Uhr) |
|
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Prospeed 3.0 komplett mit Beispiel | profanfan | Helfer & Tools | 15 | 09.03.2009 22:22 |
| ProSpeed.dll - Version 3.0 | Frabbing | Dlls, Includes, Units & Prozeduren | 1 | 07.03.2009 22:16 |
| Textdatei einlesen | SusiQ | C/C++, Visual C++, Visual C++.NET | 2 | 13.07.2006 01:33 |
| PDF dateien in word einlesen | Höge | Software - Allgemein | 13 | 19.04.2006 11:15 |
| Textdateien einlesen | Gerhard000 | Office-Anwendungen | 1 | 06.11.2004 13:34 |