Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Pisanie gry 2D za pomocą silnika Irrlicht


Rekomendowane odpowiedzi

Opublikowano

Panowie, poczebna pomoc :D

Z tej paczki plików wsio z folderu include wbijam do folderu include w folderza autoit, dorzucam tam tez au3irrlicht2.au3.

Następnie kiedy daje te pare linijek z punktu 1 i 2, to dostaje na jape errora o tym, że nie udało się zincludować bodajże 5 plików.

Wkurzyłem się, pogmerałem i przerobiłem treść tego pliku au3irrlicht2.au3 z:

 

 

 

#include-once

 

; #INDEX# =======================================================================================================================

; Title .........: au3Irrlicht2

; AutoIt Version : v3.3.6.1

; Language ......: English

; Description ...: Main UDF for au3Irrlicht2 which includes all other irrLicht category specific UDF's.

; Author(s) .....: jRowe, linus.

; DLL functionality by Frank Dodd (IrrlichtWrapper), Nikolaus Gebhardt and Irrlicht team (Irrlicht).

; Dll(s) ........: IrrlichtWrapper.dll, Irrlicht.dll, msvcp71.dll

; ===============================================================================================================================

 

#include ".\include\au3Irr2_Constants.au3"

#include ".\include\au3Irr2_System.au3"

#include ".\include\au3Irr2_KeyboardMouse.au3"

#include ".\include\au3Irr2_FilingSystem.au3"

#include ".\include\au3Irr2_2D.au3"

#include ".\include\au3Irr2_Materials.au3"

#include ".\include\au3Irr2_Scene.au3"

#include ".\include\au3Irr2_Node.au3"

#include ".\include\au3Irr2_Animation.au3"

#include ".\include\au3Irr2_Collision.au3"

#include ".\include\au3Irr2_Camera.au3"

#include ".\include\au3Irr2_Lighting.au3"

#include ".\include\au3Irr2_Terrain.au3"

#include ".\include\au3Irr2_Particles.au3"

#include ".\include\au3Irr2_GUI.au3"

 

na:

 

 

 

 

#include-once

 

; #INDEX# =======================================================================================================================

; Title .........: au3Irrlicht2

; AutoIt Version : v3.3.6.1

; Language ......: English

; Description ...: Main UDF for au3Irrlicht2 which includes all other irrLicht category specific UDF's.

; Author(s) .....: jRowe, linus.

; DLL functionality by Frank Dodd (IrrlichtWrapper), Nikolaus Gebhardt and Irrlicht team (Irrlicht).

; Dll(s) ........: IrrlichtWrapper.dll, Irrlicht.dll, msvcp71.dll

; ===============================================================================================================================

 

#include "au3Irr2_Constants.au3"

#include "au3Irr2_System.au3"

#include "au3Irr2_KeyboardMouse.au3"

#include "au3Irr2_FilingSystem.au3"

#include "au3Irr2_2D.au3"

#include "au3Irr2_Materials.au3"

#include "au3Irr2_Scene.au3"

#include "au3Irr2_Node.au3"

#include "au3Irr2_Animation.au3"

#include "au3Irr2_Collision.au3"

#include "au3Irr2_Camera.au3"

#include "au3Irr2_Lighting.au3"

#include "au3Irr2_Terrain.au3"

#include "au3Irr2_Particles.au3"

#include "au3Irr2_GUI.au3"

 

 

 

Teraz już nie mam errora, ale zamiast gui pokazuje mi się na ułamek sekundy ikonka autoit wyświetlona na trayu.

Kiedy dodałem pętle, aby program się nie wyłączał, to ikonka jest cały czas, ale gui nie chce się pokazać.

Helpnie ktoś?

Opublikowano

Pobierz tą paczkę i odpal poradik.au3 .

Bez żadnego kopiowania itp. Po prostu odpal.

 

Jeżeli nie będzie działało i bedzie ikonka na trayu, albo mignie i sie nic nie stanie pozatym ,lub nic sie wgl nie stanie wówczas pobierz DirectxSDK.

Waży z ~400mb .

 

@Down

Nie musisz nie 'zbieram' tego, wiec nie wyrzucaj limitu na mnie ;)

Opublikowano

@up, dzięki, jak zwykle się wykazałem i zjebałem najprostszą rzecz...

Dziś już wykorzystałem limit like, ale od jutra daje ci like w każdym napotkanym poście :D:D

  • 6 miesięcy temu...
Opublikowano

jak otwieram examplelauncher.exe i klikam setup to wyskakuje ze mam uruchomic jako administrator, ale jak uruchamiam jako admin to i tak to samo; /

Vista

A nic innego nie moge kliknac..

giphy.gif

Opublikowano

Func KolizjaEND()
If $x < 0 Then $x = 0
If $y < 0 Then $y = 0
If $x > ($screenx - $szerokoscpostaci) Then $x = ($screenx - $szerokoscpostaci)
If $y > ($screeny - $wysokoscpostaci) Then $y = ($screeny - $wysokoscpostaci)
EndFunc

 

Skrypt na wykrywanie kolizji zdecydowanie nie twój. Ty wszystko piszesz z małej i w ścisku.

 

UWAGA! Aby działało idealnie postać musi być idealnie przycięta.

Opublikowano

Skrypt zdecydowanie mój kolego wyżej ;)

Poza tym jeżeli sądzisz ze go wymyslilem to fakt : nie wymyslilem , tym juz dawno zajeli sie matematycy głowiąc się kiedy dwa czworokąty na siebie nachodzą i możesz poczytać o kolizjach AABB znajdziesz mnóstwo o tym :)

Przytoczenie jednak tej wiedzy uznałem za niezbędne dla takiego poradnika a skrypt caly wyzej jest w pelni moj :)

 

@2down

Chyba zaczynasz zachęcać ;>

Fakt jakoś mało się staram po otrzymaniu niebieskiej blaszki ... ;p

Opublikowano

($bohater_x + $szer_bohater > $przeszkoda_x) And ($bohater_y + $wys_bohater > $przeszkoda_y) And ($bohater_x < $przeszkoda_x + $szer_przeszkoda) And ($bohater_y < $przeszkoda_y + $wys_przeszkoda)

O ten kawałek mi chodzi. Gdybyś to był ty to byś tak napisał:

($bohaterx+$szerbohater>$przeszkodax)and($bohatery+$wysbohater>$przeszkoday)And($bohaterx<$przeszkodax+$szerprzeszkoda)and($bohatery<$przeszkoday+$wysprzeszkoda)

No porównaj :P

Opublikowano

@up. ale do czego zmierzasz? Co to robi za różnicę? tidy autoit i tak dodaje odstępy...

Jeśli jednak chodzi ci o to, że skopiował to skądś to może jesteś debilem i nie zauważyłeś, że jest tego tysiące w internecie, a każde różni się jedynie nazwami zmiennych

 

btw. Tak dawno nic nie dopisywałeś, może jakieś coś o trójkątnych siatkach i kolizjach między nimi?(może polygony, triangulacja etc) Może trochę taki overkill jak dla autoit, ale w wolnej chwili może byś coś wyskrobał.

  • 3 tygodnie później...
Opublikowano

INFO DLA OSÓB, KTÓRYM NIE DZIAŁA: Należy skompilować skrypt do architektury x86(i tylko do niej). Następnie możemy normalnie uruchamiać skrypt przez wciśnięcie F5. U mnie sposób zadziałał na 2 komputerach.

 

Udało mi się dopisać zbieranie punktów i 2 nowe AI:

 

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include "au3Irrlicht2.au3"
#include "misc.au3"
$screen_width = 800 ;szerokosc okna
$screen_height = 600 ;wysokosc okna
$points=0
$lives=5
$immortal=0
GUICreate("Gra", 100, 200, 0, 0)
GUISetState()
GUICtrlCreateLabel("Punkty:", 10, 10, 40)
GUICtrlCreateLabel("Życie:", 10, 40, 40)
$labelpoints=GUICtrlCreateLabel($points, 50, 10, 40)
$labellives=GUICtrlCreateLabel($lives, 50, 40, 40)

_IrrStart() ;zainicjowanie silnika Irrlicht
_IrrSetWindowCaption( "Gra" ) ;tytul dla okna

$postac=_IrrGetTexture("player1.bmp");
$przeszkoda=_IrrGetTexture("boom.bmp");
$mob=_irrgettexture("bomba.bmp")
$mob2=_irrgettexture("bomba.bmp")
$mob3=_irrgettexture("bomba.bmp")
$star=_irrgettexture("star.bmp")
_IrrColorKeyTexture($postac, 255,255,255 )
_IrrColorKeyTexture($mob, 255,255,255 )
_IrrColorKeyTexture($star, 255,255,255 )

$x=100 ;pozycja x postaci
$y=100 ;pozycja y postaci
$xmob=400
$ymob=400
$xmob2=500
$ymob2=100
$xmob3=100
$ymob3=500
$starx=Random(50, $screen_width-50, 1)
$stary=Random(50, $screen_height-50, 1)
$mob1speed=1.5
$speedmob2 =2.5
$speedxmob3=0
$speedymob3=0
$mob3maxspeed=10
$mob3mod=3
$a=1
_IrrBeginScene( 0,0,255)
AdlibRegister("immortal", 100)

WHILE _IrrRunning()
$a+=1
;_IrrBeginScene( 0,0,255) ;rozpoczecie rysowania sceny ,nadanie tła
_IrrDraw2DImageElement( $postac, $x ,$y, 0,0,32,32, $IRR_use_ALPHA ) ;to nasza postac
_IrrDraw2DImageElement( $przeszkoda, 200 ,200, 0,0,128,128, $IRR_IGNORE_ALPHA ) ; to nasz przedmiot z którym kolidujemy
_IrrDraw2DImageElement( $mob, $xmob ,$ymob, 0,0,32,32, $IRR_use_ALPHA )
_IrrDraw2DImageElement( $mob2, $xmob2 ,$ymob2, 0,0,32,32, $IRR_use_ALPHA )
_IrrDraw2DImageElement( $mob3, $xmob3 ,$ymob3, 0,0,32,32, $IRR_use_ALPHA )
_IrrDraw2DImageElement( $star, $starx ,$stary, 0,0,32,32, $IRR_use_ALPHA )

;If Mod($aa, 10)=5 Then
_Irrendscene() ;koniec rysowania sceny


;EndIf
;_IrrDrawSceneToTexture($h_RenderTargetTexture)
AImob1()
AImob2()
If Mod($a, $mob3mod)=0 Then AImob3()
kolizja($x,$y,32,32,200,200,128,128,0)

sterowanie()
If ((Abs($x-$xmob)<16 And Abs($y-$ymob)<16) Or (Abs($x-$xmob2)<16 And Abs($y-$ymob2)<16) Or (Abs($x-$xmob3)<16 And Abs($y-$ymob3)<16)) And $immortal<=0 Then
$immortal=3
$lives-=1
GUICtrlSetData($labellives, $lives)
If $lives=0 Then
MsgBox(0, "Koniec gry", "Zdobyłeś " & $points & " punktów")
Exit
EndIf
EndIf

If $immortal>0 Then
_IrrBeginScene(255,0,0)
Else
_IrrBeginScene(0,0,255)
EndIf


If (Abs($x-$starx)<32 And Abs($y-$stary)<32) Then
$points+=1
GUICtrlSetData($labelpoints, $points)
Do
$starx=Random(50, $screen_width-50, 1)
$stary=Random(50, $screen_height-50, 1)
Until not ($starx+16>200 And $starx+16<328 And $stary+16>200 And $stary+16<328)
EndIf


Sleep(1)


WEnd

func sterowanie()
if _IsPressed("27") Then $x+=5 ;jesli zostanie nacisniety klawisz strzalki w prawo wtedy wartość $x zwiekszy sie o 5.
if _IsPressed("25") Then $x-=5
if _IsPressed("28") Then $y+=5
if _IsPressed("26") Then $y-=5
if $x >= $screen_width then $x = 0
if $x < 0 then $x = $screen_width
if $y >= $screen_height then $y = 0
if $y < 0 then $y = $screen_height
EndFunc


func kolizja($bohater_x,$bohater_y,$szer_bohater,$wys_bohater,$przeszkoda_x,$przeszkoda_y,$szer_przeszkoda,$wys_przeszkoda,$id=0)

if ($bohater_x + $szer_bohater > $przeszkoda_x) And ($bohater_y + $wys_bohater > $przeszkoda_y) And ($bohater_x < $przeszkoda_x + $szer_przeszkoda) And ($bohater_y < $przeszkoda_y + $wys_przeszkoda) Then

if $id=0 then

if $bohater_x>$przeszkoda_x then $x+=5
if $bohater_x<$przeszkoda_x then $x-=5
if $bohater_y>$przeszkoda_y then $y+=5
if $bohater_y<$przeszkoda_y then $y-=5


EndIf
endif

endfunc



func AImob1()

if $xmob<$x then $xmob+=$mob1speed
if $ymob<$y then $ymob+=$mob1speed
if $ymob>$y then $ymob-=$mob1speed
if $xmob>$x then $xmob-=$mob1speed

endfunc

func AImob2()
Switch $xmob2-$x
Case -200 to -1
$xmob2+=$speedmob2
Case 0 to 200
$xmob2-=$speedmob2
Case Else
$xmob2+=Random(-10, 10, 1)
EndSwitch
Switch $ymob2-$y
Case -200 to -1
$ymob2+=$speedmob2
Case 0 to 200
$ymob2-=$speedmob2
Case Else
$ymob2+=Random(-10, 10, 1)
EndSwitch
endfunc

func AImob3()
;If Mod ($a, 2) Then
if $xmob3<$x And $speedxmob3<$mob3maxspeed then $speedxmob3+=1
if $ymob3<$y And $speedymob3<$mob3maxspeed then $speedymob3+=1
if $ymob3>$y And $speedymob3>-$mob3maxspeed then $speedymob3-=1
if $xmob3>$x And $speedxmob3>-$mob3maxspeed then $speedxmob3-=1
;EndIf
$xmob3+=$speedxmob3
$ymob3+=$speedymob3
endfunc

Func immortal()
$immortal-=0.1
EndFunc

 

Paczka razem z Irrlight:

https://skydrive.live.com/redir?resid=1B9EC8947ED5A279!15279&authkey=!AOaI8m3FyVMNRP4

Paczka bez irrlight(grafika+kod):

https://skydrive.live.com/redir?resid=1B9EC8947ED5A279!15280&authkey=!ALsXswWkvjnQgqU

 

Biblioteka bardzo dobra, tego mi brakowało

 

INFO DLA OSÓB, KTÓRYM NIE DZIAŁA: Należy skompilować skrypt do architektury x86(i tylko do niej). Następnie możemy normalnie uruchamiać skrypt przez wciśnięcie F5. U mnie sposób zadziałał na 2 komputerach.

Law of Revelation: The hidden flaw never remains hidden.

Opublikowano

Dobra, biblioteka jest tym, czego potrzebowałem, ale takie pytanko: Czy jeśli wygenerowałem scenę, mogę ją zapisać, aby potem jak postać chodzi nie trzeba było całej planszy renderować od nowa? Chodzi mi o to, żeby na czymś takim zrobić poruszanie postacią:

 

 


#include "au3Irrlicht2.au3"
#include "misc.au3"
;#OnAutoItStartRegister "Setup"
Opt("GUIOnEventMode", 1)
HotKeySet("{Esc}", "Exi")
Global $random=1
Global $maps[2], $mapsize[2], $guisize[2]=[@DesktopWidth-40, @DesktopHeight-10], $Form1, $Form2, $map, $mappos[2]=[0, 0], $player[2], $PicPlayer, $time=0, $Bombs[2][2][2], $player1info[1]=[5];1 - zasięg
Global $mapfromfile=False, $map=IniRead("Properties.ini", "Settings", "map", "Map1.ini"), $texturepack=IniRead("Properties.ini", "Settings", "texturepack", "Normal\scaled"), $Color=IniRead("Properties.ini", "Settings", "bkcolor", 0x010101), $maxmap[2]=[iniRead("Properties.ini", "Settings", "Maxmapx", 50), IniRead("Properties.ini", "Settings", "Maxmapy", 30)], $visual=IniRead("Properties.ini", "Settings", "pixels", 32)
Global $GameName="Wefhy's Bomberman", $Terrain[$maxmap[0]+1][$maxmap[1]+1], $Pic[$maxmap[0]+1][$maxmap[1]+1], $tekstury[3]=["Texturepack\" & $texturepack & "\Trawa.bmp", "Texturepack\" & $texturepack & "\Skała.bmp", "Texturepack\" & $texturepack & "\Drewno.bmp"]
$hdll=DllOpen("user32.dll")
OnAutoItExitRegister("close")

if $mapfromfile Then
MapGet()
Else
MapRandom(25,19)
EndIf
_IrrStart($IRR_EDT_DIRECT3D9, 800, 608) ;zainicjowanie silnika Irrlicht
_IrrSetWindowCaption( "Bomberman" )
$PicPlayer=_irrgettexture("player1.bmp")
_IrrColorKeyTexture($PicPlayer, 255,255,255 )
Global $grafika[3]=[_irrgettexture($tekstury[0]), _irrgettexture($tekstury[1]), _irrgettexture($tekstury[2])]

_IrrBeginScene( 0,0,255)
For $temp1=1 to $maps[0]
For $temp2=1 to $maps[1]
_IrrDraw2DImageElement( $grafika[$Terrain[$temp1][$temp2]], $temp1*$visual-$visual, $temp2*$visual-$visual, 0,0,32,32, $IRR_IGNORE_ALPHA )
Next
Next

_IrrDraw2DImageElement( $PicPlayer, 0 ,0, 0,0,$visual,$visual, $IRR_use_ALPHA )
_Irrendscene()



While _IrrRunning()
WEnd



Func MapGet()
;$map=FileOpen($mappath)
$mapname=IniRead($map, "Settings", "mapname", "Noname")
$mapsize[0]=IniRead($map, "Settings", "mapsizex", 0)
$mapsize[1]=IniRead($map, "Settings", "mapsizey", 0)
$maps[0]=$mapsize[0]
$maps[1]=$mapsize[1]
If ($mapsize[0]=0 Or $mapsize[0]>$maxmap[0]) then $maps[0]=$maxmap[0]
If ($mapsize[1]=0 Or $mapsize[1]>$maxmap[1]) then $maps[1]=$maxmap[1]

$default=IniRead($map, "Settings", "Defaultterrain", 0)
For $temp1=1 to $maps[0]
;sleep(50)
For $temp2=1 to $maps[1]
$temp3=IniRead($map, "Terrain", $temp1 & "-" & $temp2, $default)
$Terrain[$temp1][$temp2]=$tekstury[$temp3]
Next
Next
If ( ( Not ( $mapsize[0]=$maps[0] ) ) Or ( Not ( $mapsize[1]=$maps[1] ) ) ) Then $maps=$maxmap;ErrorMapSize()
ReDim $Bombs[$maps[0]][$maps[1]][2]

EndFunc

Func MapRandom($sizex, $sizey)
$mapname="Mapa"
$mapsize[0]=$sizex
$mapsize[1]=$sizey
$maps[0]=$mapsize[0]
$maps[1]=$mapsize[1]
If ($mapsize[0]=0 Or $mapsize[0]>$maxmap[0]) then $maps[0]=$maxmap[0]
If ($mapsize[1]=0 Or $mapsize[1]>$maxmap[1]) then $maps[1]=$maxmap[1]
For $temp1=1 to $maps[0]
For $temp2=1 to $maps[1]
If not(Mod($temp1, 2) Or Mod($temp2, 2)) Then
$temp3=1
ElseIf Random(0, $random, 1) And ($temp1>2 Or $temp2>2) And ($maps[0]+1-$temp1>2 Or $temp2>2) And ($temp1>2 Or $maps[1]+1-$temp2>2) And ($maps[0]+1-$temp1>2 Or $maps[1]+1-$temp2>2) Then
$temp3=2
Else
$temp3=0
EndIf

;$temp3=(Random(0, 4, 1)>0)
$Terrain[$temp1][$temp2]=$temp3
Next
Next
ReDim $Bombs[$maps[0]+1][$maps[1]+1][2]

EndFunc


func Exi()
Exit
EndFunc
Func Close()
DllClose($hdll)
FileClose($map)
EndFunc

 

 

Czyli trzeba by najlepiej po stworzeniu mapy zapisać ją, a potem na kolejnych scenach wczytywać i nakładać postać, a nie generować całą mapę od nowa. Teksturki w załączniku.

 

Sorry za post pod postem

A tu na forum się myli kolorowanie kodu, /" nie jest uznawane za koniec napisu, tylko za użyty znak " w napisie czyli jak w moim kodzie było $coś="tekst/" to nie zostało uznane za zakończony tekst... z tąd błąd w kolorowaniu

 

EDIT:

Udało mi się zrobić poruszanie postacią+kolizje. I tak jak się spodziewałem gra osiąga 20fps i zabiera 10% procesora(core i3 x64 2 rdzenie 4 logiczne)

Oczywiście prawie całą moc zabiera generowanie mapy, które odbywa się przy każdym ruchu zamiast jednorazowo. Nie ma jakiejś funkcji, która by to zapisała?

Paczka:

https://skydrive.live.com/redir?resid=1B9EC8947ED5A279!15332&authkey=!ADSadc7sahUJGwQ

Kod:

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_UseX64=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
;MsgBox(0, "", $CMDLINERAW)


#include "au3Irrlicht2.au3"
#include "misc.au3"
;#OnAutoItStartRegister "Setup"
Opt("GUIOnEventMode", 1)
HotKeySet("{Esc}", "Exi")
Global $random=1
Global $maps[2], $mapsize[2], $guisize[2]=[@DesktopWidth-40, @DesktopHeight-10], $Form1, $Form2, $map, $mappos[2]=[0, 0], $player[2], $PicPlayer, $time=0, $Bombs[2][2][2], $player1info[1]=[5];1 - zasięg
Global $mapfromfile=False, $map=IniRead("Properties.ini", "Settings", "map", "Map1.ini"), $texturepack=IniRead("Properties.ini", "Settings", "texturepack", "Normal\scaled"), $Color=IniRead("Properties.ini", "Settings", "bkcolor", 0x010101), $maxmap[2]=[iniRead("Properties.ini", "Settings", "Maxmapx", 50), IniRead("Properties.ini", "Settings", "Maxmapy", 30)], $visual=IniRead("Properties.ini", "Settings", "pixels", 32)
Global $GameName="Wefhy's Bomberman", $Terrain[$maxmap[0]+1][$maxmap[1]+1], $Pic[$maxmap[0]+1][$maxmap[1]+1], $tekstury[3]=["Texturepack\" & $texturepack & "\Trawa.bmp", "Texturepack\" & $texturepack & "\Skała.bmp", "Texturepack\" & $texturepack & "\Drewno.bmp"];, $Budynki[11]=["Texturepack\" & $texturepack & "\Ratusz.bmp"]
$hdll=DllOpen("user32.dll")
OnAutoItExitRegister("close")

if $mapfromfile Then
MapGet()
Else
MapRandom(25,19)
EndIf
_IrrStart($IRR_EDT_DIRECT3D9, 800, 608) ;zainicjowanie silnika Irrlicht
_IrrSetWindowCaption( "Bomberman" )
$PicPlayer=_irrgettexture("player1.bmp")
_IrrColorKeyTexture($PicPlayer, 255,255,255 )
Global $grafika[3]=[_irrgettexture($tekstury[0]), _irrgettexture($tekstury[1]), _irrgettexture($tekstury[2])]

;$time=TimerInit()

_IrrBeginScene( 0,0,0)
For $temp1=1 to $maps[0]
For $temp2=1 to $maps[1]
_IrrDraw2DImageElement( $grafika[$Terrain[$temp1][$temp2]], $temp1*$visual-$visual, $temp2*$visual-$visual, 0,0,32,32, $IRR_IGNORE_ALPHA )
Next
Next

_IrrDraw2DImageElement( $PicPlayer, 0 ,0, 0,0,$visual,$visual, $IRR_use_ALPHA )
_Irrendscene()
;Sleep(1)

;MsgBox(0, "", TimerDiff($time))

$speed=8
Global $round[4], $klatka, $ispressed[4]
AdlibRegister("FPS", 1000)
While _IrrRunning()
$ispressed[0]=_IsPressed("27", $hdll)
$ispressed[1]=_IsPressed("25", $hdll)
$ispressed[2]=_IsPressed("28", $hdll)
$ispressed[3]=_IsPressed("26", $hdll)
$klatka+=1
Sleep(20)
$round[0]=Round($player[0]/$visual)+1
$round[1]=Round($player[1]/$visual)+1
if $ispressed[0] Then
$round[2]=Round(($player[0]+$speed)/$visual)+1
$round[3]=Round($player[1]/$visual)+1
If Not $Terrain[$round[2]][$round[3]] Then
$player[0]+=$speed
ElseIf $ispressed[2] Or $ispressed[3] Then

ElseIf $Terrain[$round[0]][$round[1]+1]=0 And $Terrain[$round[0]+1][$round[1]+1]=0 And $Terrain[$round[0]][$round[1]-1]=0 And $Terrain[$round[0]+1][$round[1]-1]=0 Then
If $player[1]/$visual+1>$round[1] Then
$player[1]+=$speed
Else
$player[1]-=$speed
EndIf
ElseIf $Terrain[$round[0]][$round[1]+1]=0 And $Terrain[$round[0]+1][$round[1]+1]=0 Then
$player[1]+=$speed
ElseIf $Terrain[$round[0]][$round[1]-1]=0 And $Terrain[$round[0]+1][$round[1]-1]=0 Then
$player[1]-=$speed
EndIf
EndIf

if $ispressed[1] Then
$round[2]=Round(($player[0]-$speed)/$visual)+1
$round[3]=Round($player[1]/$visual)+1
If Not $Terrain[$round[2]][$round[3]] Then
$player[0]-=$speed
ElseIf $ispressed[2] Or $ispressed[3] Then

ElseIf $Terrain[$round[0]][$round[1]+1]=0 And $Terrain[$round[0]-1][$round[1]+1]=0 And $Terrain[$round[0]][$round[1]-1]=0 And $Terrain[$round[0]-1][$round[1]-1]=0 Then
If $player[1]/$visual+1>$round[1] Then
$player[1]+=$speed
Else
$player[1]-=$speed
EndIf
ElseIf $Terrain[$round[0]][$round[1]+1]=0 And $Terrain[$round[0]-1][$round[1]+1]=0 Then
$player[1]+=$speed
ElseIf $Terrain[$round[0]][$round[1]-1]=0 And $Terrain[$round[0]-1][$round[1]-1]=0 Then
$player[1]-=$speed
EndIf
EndIf

if $ispressed[2] Then
$round[2]=Round($player[0]/$visual)+1
$round[3]=Round(($player[1]+$speed)/$visual)+1
If Not $Terrain[$round[2]][$round[3]] Then
$player[1]+=$speed
ElseIf $ispressed[0] Or $ispressed[1] Then

ElseIf $Terrain[$round[0]+1][$round[1]]=0 And $Terrain[$round[0]+1][$round[1]+1]=0 And $Terrain[$round[0]-1][$round[1]]=0 And $Terrain[$round[0]-1][$round[1]+1]=0 Then
If $player[0]/$visual+1>$round[0] Then
$player[0]+=$speed
Else
$player[0]-=$speed
EndIf
ElseIf $Terrain[$round[0]+1][$round[1]]=0 And $Terrain[$round[0]+1][$round[1]+1]=0 Then
$player[0]+=$speed
ElseIf $Terrain[$round[0]-1][$round[1]]=0 And $Terrain[$round[0]-1][$round[1]+1]=0 Then
$player[0]-=$speed
EndIf
EndIf

if $ispressed[3] Then
$round[2]=Round($player[0]/$visual)+1
$round[3]=Round(($player[1]-$speed)/$visual)+1
If Not $Terrain[$round[2]][$round[3]] Then
$player[1]-=$speed
ElseIf $ispressed[0] Or $ispressed[1] Then

ElseIf $Terrain[$round[0]+1][$round[1]]=0 And $Terrain[$round[0]+1][$round[1]-1]=0 And $Terrain[$round[0]-1][$round[1]]=0 And $Terrain[$round[0]-1][$round[1]-1]=0 Then
If $player[0]/$visual+1>$round[0] Then
$player[0]+=$speed
Else
$player[0]-=$speed
EndIf
ElseIf $Terrain[$round[0]+1][$round[1]]=0 And $Terrain[$round[0]+1][$round[1]-1]=0 Then
$player[0]+=$speed
ElseIf $Terrain[$round[0]-1][$round[1]]=0 And $Terrain[$round[0]-1][$round[1]-1]=0 Then
$player[0]-=$speed
EndIf
EndIf

_IrrBeginScene( 0,0,0)
For $temp1=1 to $maps[0]
For $temp2=1 to $maps[1]
_IrrDraw2DImageElement( $grafika[$Terrain[$temp1][$temp2]], $temp1*$visual-$visual, $temp2*$visual-$visual, 0,0,32,32, $IRR_IGNORE_ALPHA )
Next
Next

_IrrDraw2DImageElement( $PicPlayer, $player[0] ,$player[1], 0,0,$visual,$visual, $IRR_use_ALPHA )
_Irrendscene()
;ToolTip($round[0] & @CRLF & $round[1])
WEnd



Func MapGet()
;$map=FileOpen($mappath)
$mapname=IniRead($map, "Settings", "mapname", "Noname")
$mapsize[0]=IniRead($map, "Settings", "mapsizex", 0)
$mapsize[1]=IniRead($map, "Settings", "mapsizey", 0)
$maps[0]=$mapsize[0]
$maps[1]=$mapsize[1]
If ($mapsize[0]=0 Or $mapsize[0]>$maxmap[0]) then $maps[0]=$maxmap[0]
If ($mapsize[1]=0 Or $mapsize[1]>$maxmap[1]) then $maps[1]=$maxmap[1]

$default=IniRead($map, "Settings", "Defaultterrain", 0)
For $temp1=1 to $maps[0]
;sleep(50)
For $temp2=1 to $maps[1]
$temp3=IniRead($map, "Terrain", $temp1 & "-" & $temp2, $default)
$Terrain[$temp1][$temp2]=$tekstury[$temp3]
Next
Next
If ( ( Not ( $mapsize[0]=$maps[0] ) ) Or ( Not ( $mapsize[1]=$maps[1] ) ) ) Then $maps=$maxmap;ErrorMapSize()
ReDim $Bombs[$maps[0]][$maps[1]][2]

EndFunc

Func MapRandom($sizex, $sizey)
$mapname="Mapa"
$mapsize[0]=$sizex
$mapsize[1]=$sizey
$maps[0]=$mapsize[0]
$maps[1]=$mapsize[1]
If ($mapsize[0]=0 Or $mapsize[0]>$maxmap[0]) then $maps[0]=$maxmap[0]
If ($mapsize[1]=0 Or $mapsize[1]>$maxmap[1]) then $maps[1]=$maxmap[1]
For $temp1=1 to $maps[0]
For $temp2=1 to $maps[1]
If not(Mod($temp1, 2) Or Mod($temp2, 2)) Then
$temp3=1
ElseIf Random(0, $random, 1) And ($temp1>2 Or $temp2>2) And ($maps[0]+1-$temp1>2 Or $temp2>2) And ($temp1>2 Or $maps[1]+1-$temp2>2) And ($maps[0]+1-$temp1>2 Or $maps[1]+1-$temp2>2) Then
$temp3=2
Else
$temp3=0
EndIf

;$temp3=(Random(0, 4, 1)>0)
$Terrain[$temp1][$temp2]=$temp3
Next
Next
ReDim $Bombs[$maps[0]+1][$maps[1]+1][2]

EndFunc


func Exi()
Exit
EndFunc
Func Close()
DllClose($hdll)
FileClose($map)
EndFunc

Func FPS()
_IrrSetWindowCaption( "Bomberman - " & $klatka & "fps" )
$klatka=0
EndFunc

Wefhy's Bomberman 2.rar

Law of Revelation: The hidden flaw never remains hidden.

Opublikowano

Do mojego kodu?

W tu akurat tonie działa, ale wystarczy zmienić $mapfromfile=true(gdzieś tak linia 15) funkcję mapget na taką:

Func MapGet()
$mapname=IniRead($map, "Settings", "mapname", "Noname")
$mapsize[0]=IniRead($map, "Settings", "mapsizex", 0)
$mapsize[1]=IniRead($map, "Settings", "mapsizey", 0)
$maps[0]=$mapsize[0]
$maps[1]=$mapsize[1]
$default=IniRead($map, "Settings", "Defaultterrain", 0)
For $temp1=1 to $maps[0]
 For $temp2=1 to $maps[1]
  $temp3=IniRead($map, "Terrain", $temp1 & "-" & $temp2, $default)
  $Terrain[$temp1][$temp2]=$temp3
 Next
Next
If ( ( Not ( $mapsize[0]=$maps[0] ) ) Or ( Not ( $mapsize[1]=$maps[1] ) ) ) Then $maps=$maxmap;ErrorMapSize()
ReDim $Bombs[$maps[0]][$maps[1]][2]
EndFunc

I do folderu wrzucić plik map1.ini, który wygląda tak:

[settings]
mapname=Mapa Testowa
mapsizex=20
mapsizey=11
[Terrain]
2-3=1
7-5=1
2-5=1
6-4=1
6-1=1
5-4=1
5-5=1
6-5=2
4-4=1
4-7=2
3-6=1

Przykładowo 2-3=1 oznacza, że na współźędnych x=2 y=3 ma powstać blok 1 (czyli skała), a 6-5=2 oznacza że na x=6 y=5 ma powstać blok 2(czyli drewno)

Law of Revelation: The hidden flaw never remains hidden.

  • 4 miesiące temu...
Opublikowano

A czy jest jakiś sposób by usunąć texture :D Bo robie serca i jak uderzy się w potwora to znikają ale _IrrRemoveTexture i _IrrRemoveImage coś nie działa :/

. . .

  • 1 rok później...
  • 4 miesiące temu...
Opublikowano

Eh byłem zbanowany i nie zaglądałem tu ale dla kolejnych osób odpowiem na to wyżej.

Utwórzcie folder na nowy projekt - tam będziemy mieli wszystkie nasze pliki. 
Stwórz pusty plik autoit  i zapisz go w tym folderze.

Do folderu wklejcie z tej paczki foldery: bin i include , oraz plik au3Irrlicht2.au3

Teraz piszecie w pustym pliku który utworzyliście - jedziecie razem z poradnikiem.

A nagrodę przyznam sobie sam:

 

7166914195121061304650.jpg

 

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...