ПроЭктировщик
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений (для 71 пользователей)
|
Да есть такое ... позже подправлю (тот же "глюк" при нажатии правой кнопки мыши когда наведена на крайние ячейки)
поправил ...
заменить код ...
If MouseDown(1) Or MouseDown(2) And mouse_sel = True Then
TXMap = TX : TYMap = TY
Else
mouse_sel = False
EndIf
на ...
If MouseDown(1) Or MouseDown(2) And mouse_sel = True Then
If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
TXMap = TX : TYMap = TY
EndIf
Else
mouse_sel = False
EndIf
исправил мелкие "баги"
теперь если мышь за пределами поля анимация проигрываться не будет , вообще реакций не будет.
Тест Код: виды атаки .(вариант 3 ,с анимацией)
заменить GRIG 5 на этот код (см. оффтоп)
Include "F_Strela_2.bb"
Include "Grid_2d_iso_2.bb"
Global TX,TY,mx#,my# ,frmSparks
Graphics 800,600,32,2
Load_BackGround_Image()
elf_lukcinik = LoadAnimImage ("Images\hero4.bmp",80,80,0,9)
;ResizeImage elf_lukcinik ,64 ,64
MaskImage elf_lukcinik, 100,100,100 ; 255,255,255 ;
IW = ImageWidth(elf_lukcinik )
IH = ImageHeight(elf_lukcinik )
HandleImage elf_lukcinik,IW/2,IH
fon = CreateImage (761,511)
SetBuffer ImageBuffer(fon )
CreateGrid()
SetBuffer BackBuffer()
Free_BackGround_Image()
vibor%=1
frmSparks =0
TXMap =6
TYMap =6
ClsColor 189 ,183, 107
While Not KeyHit(1)
Cls
mx# = MouseX() : my# = MouseY()
DrawImage fon,0,0
DrawImage elf_lukcinik, GRx + TPosX(TXMap,TYMap) ,GRy + TPosY(TXMap,TYMap) ,frmSparks
;Rect GRx + TPosX(6,6)-16,GRy + TPosY(6,6)-48,32,48
ym# = Floor#((my-GRy)/ TileSizeY)
xm# = Floor#(( (mx-GRx )/ TileSizeX*( (fov/(fov+ym#))) )+num_tileX+1)
TX = Int(xm) : TY = Int(ym)
If KeyDown(2) Then vibor%=1
If KeyDown(3) Then vibor%=2
If KeyDown(4)Then vibor%=3
If KeyDown(5) Then vibor%=4
If MouseDown(1) Or MouseDown(2) And TX = TXMap And TY = TYMap And mouse_sel = False Then mouse_sel = True
If MouseDown(1) Or MouseDown(2) And mouse_sel = True Then
If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
TXMap = TX : TYMap = TY
EndIf
Else
mouse_sel = False
EndIf
If MouseHit(1) And mouse_sel = False Then
If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
If TX = (TXMap+1) Or TX = (TXMap-1) Or TY = (TYMap-1) Or TY = (TYMap+1) Then
playanimation=2
Restore elf_attack_noj
EndIf
If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
playanimation=1:m1 = True
Restore elf_attack_luk
EndIf
EndIf
EndIf
If MouseHit(2) And mouse_sel = False Then
If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
If TX = (TXMap+1) Or TX = (TXMap-1) Or TY = (TYMap-1) Or TY = (TYMap+1) Then
playanimation=2
Restore elf_attack_noj
EndIf
If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
playanimation=1:m2 = True
Restore elf_attack_luk
EndIf
EndIf
EndIf
Select playanimation
Case 0
If MilliSecs() > tmrSparks + 2180 Then
tmrSparks=MilliSecs() ; сбрасываем таймер
Read frmSparks
If frmSparks =0 Then
frmSparks =0:playanimation=0 : Restore elf_static
EndIf
If frmSparks =2 Then attack1 = True
EndIf
Case 1
If MilliSecs() > tmrSparks + 180 Then
tmrSparks=MilliSecs() ; сбрасываем таймер
Read frmSparks
If frmSparks =0 Then
frmSparks =0:playanimation=0 : Restore elf_static
EndIf
If frmSparks =2 Then attack1 = True
EndIf
Case 2
If MilliSecs() > tmrSparks + 180 Then
tmrSparks=MilliSecs() ; сбрасываем таймер
Read frmSparks
If frmSparks =0 Then
frmSparks =0:playanimation=0 : Restore elf_static
EndIf
EndIf
End Select
If attack1 = True And m1 = True Then
If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
End If
EndIf
attack1 = False :m1 = False
ElseIf attack1 = True And m2 = True
If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY )-1 ,GRy + TPosY(TX+1 ,TY )-35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY )-1 ,GRy + TPosY(TX-1 ,TY )-35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY +1)-1 ,GRy + TPosY(TX ,TY+1 )-35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY -1)-1 ,GRy + TPosY(TX ,TY-1 )-35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY +1)-1 ,GRy + TPosY(TX+1 ,TY+1 )-35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY +1)-1 ,GRy + TPosY(TX-1 ,TY+1 )-35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY -1)-1 ,GRy + TPosY(TX+1 ,TY-1 )-35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY -1)-1 ,GRy + TPosY(TX-1 ,TY-1 )-35 ,vibor%)
End If
EndIf
attack1 = False :m2 = False
EndIf
For ss.streliba = Each streliba
UpdateStrela(ss)
If ss <>Null Then
Text 20,160,"dist "+ss\rastoianie_do_misheni#
EndIf
Next
Draw_Ekran()
Flip
Wend
FreeImage elf_lukcinik
FreeImage fon
Delete Each streliba
End
Function Draw_Ekran()
Color 85, 107, 47
Rect 0,0,800,50,1
Rect 0,460,800,140,1
Rect 0,30,70,430,1
Rect 0,30,70,5,1
Rect 730,30,70,430,1
Color 10,50,0
Rect 70,50,660,410,0
Rect 70,466,660,120,0
Color 255,255,255
If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
Text 80,445,""+TX+" : "+TY
EndIf
Text 10,20,"mx "+mx+" : my "+my
Text 10,140,"kolvo "+kolvo_elementov
Text 10,180,"frmSparks "+frmSparks
Text mx,my,"\"
End Function
.elf_static
Data 3,0
.elf_attack_noj
Data 5,6,7,6,5,0
.elf_attack_luk
Data 1,2,5,0
Сообщение от MoKa
А можно туда exe скомпилированный скинуть? А то у меня блица под рукой и думаю у многих других тоже не будет..
|
по просьбе трудящихся добавил EXE. ( его нужно поместить в ранее скаченную папку)
замените код..
If attack1 = True And m1 = True Then
If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
End If
EndIf
attack1 = False :m1 = False
ElseIf attack1 = True And m2 = True
If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY )-1 ,GRy + TPosY(TX+1 ,TY )-35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY )-1 ,GRy + TPosY(TX-1 ,TY )-35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY +1)-1 ,GRy + TPosY(TX ,TY+1 )-35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY -1)-1 ,GRy + TPosY(TX ,TY-1 )-35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY +1)-1 ,GRy + TPosY(TX+1 ,TY+1 )-35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY +1)-1 ,GRy + TPosY(TX-1 ,TY+1 )-35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY -1)-1 ,GRy + TPosY(TX+1 ,TY-1 )-35 ,vibor%)
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY -1)-1 ,GRy + TPosY(TX-1 ,TY-1 )-35 ,vibor%)
End If
EndIf
attack1 = False :m2 = False
EndIf
на ...
If attack1 = True And m1 = True Then
If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
End If
EndIf
attack1 = False :m1 = False
ElseIf attack1 = True And m2 = True
If TX<num_tileY And TX >0 And TY <num_tileY And TY >0
If TX > (TXMap+1) Or TX < (TXMap-1) Or TY < (TYMap-1) Or TY > (TYMap+1) Then
CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap)- 45 ,GRx + TPosX(TX ,TY )- 1 ,GRy + TPosY(TX ,TY )- 35 ,vibor%)
If TX+1<num_tileY And TX+1 >0 And TY <num_tileY And TY >0 Then CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY )-1 ,GRy + TPosY(TX+1 ,TY )-35 ,vibor%)
If TX-1<num_tileY And TX-1 >0 And TY <num_tileY And TY >0 Then CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY )-1 ,GRy + TPosY(TX-1 ,TY )-35 ,vibor%)
If TX<num_tileY And TX >0 And TY+1 <num_tileY And TY+1 >0 Then CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY +1)-1 ,GRy + TPosY(TX ,TY+1 )-35 ,vibor%)
If TX<num_tileY And TX >0 And TY-1 <num_tileY And TY-1 >0 Then CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX ,TY -1)-1 ,GRy + TPosY(TX ,TY-1 )-35 ,vibor%)
If TX+1<num_tileY And TX+1 >0 And TY+1 <num_tileY And TY+1 >0 Then CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY +1)-1 ,GRy + TPosY(TX+1 ,TY+1 )-35 ,vibor%)
If TX-1<num_tileY And TX-1 >0 And TY+1 <num_tileY And TY+1 >0 Then CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY +1)-1 ,GRy + TPosY(TX-1 ,TY+1 )-35 ,vibor%)
If TX+1<num_tileY And TX+1 >0 And TY-1 <num_tileY And TY-1 >0 Then CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX+1 ,TY -1)-1 ,GRy + TPosY(TX+1 ,TY-1 )-35 ,vibor%)
If TX-1<num_tileY And TX-1 >0 And TY-1 <num_tileY And TY-1 >0 Then CreateStreliba(GRx + TPosX(TXMap,TYMap)+20 ,GRy + TPosY(TXMap,TYMap )- 45 ,GRx + TPosX(TX-1 ,TY -1)-1 ,GRy + TPosY(TX-1 ,TY-1 )-35 ,vibor%)
End If
EndIf
attack1 = False :m2 = False
EndIf
исправил очередной "баг".
Последний раз редактировалось polopok, 07.11.2012 в 10:54.
|