Im confused
Blitz3D Forums/Blitz3D Beginners Area/Im confused
| ||
| PROBLEM SOLVED Okay, I'm trying to create a program where I fire with an image and I hit another image and then make it disappear. Tell me how to shoot something then when they make contact make the image DISAPPEAR. PROBLEM SOLVED ---------------------------------------------------------------------- |
| ||
| FreeImage retard |
| ||
| HA! im sorry. but that was funny... no offense or anything :P ~DS~ |
| ||
| Freeimage retard hahahaHAHAHAHAHA that totally sounded ambiguous |
| ||
| XD |
| ||
| lol im serious can anyone help me? I dont understand... |
| ||
| First, you missed a couple of parameters for the ImageCollide() function, specifically the Frame number. Set it to 0 if only using an image without frames. ImageRectCollide (image,x,y,frame,rect x,rect y,rect width,rect height) How about trying: If ImagesCollide(bullet,b\x,b\y,0,retard,r\x,r\y,0) Then Delete retard |
| ||
| it says cannot delete non-newtype. |
| ||
Um... you can't delete images.. you can only free them...If ImagesCollide(bullet,b\x,b\y,0,retard,r\x,r\y,0) Then FreeImage retard Did you even try? |
| ||
| A number of people think you're trying to delete the image, but I don't think you are. I think you're wanting to delete the type instance, but the type instance is called r, so it should be delete r instead of delete retard. retard is just the name of the type, it does not point to an object in particular. Incidentally, it would be less confusing - for you and us - if you changed the variable you use to load the image into. Having a type called retard and an image called retard is asking for confusion. I think Blitz3D won't care and will not confuse them, but it will make your life easier. Then we'd know for sure which you were trying to do. |
| ||
| i put freeimage and it nows says that the image doesn't exist! I'm still stuck. |
| ||
I haven't changed your code just placed some comments at some points indicating what some of the problems are..and there are a few.
;CONFUSED AKA THE PROGRAM WON'T WORK
ret = LoadImage("retard.jpg")
colin = LoadImage ("colin.jpg")
ResizeImage (colin,100,100)
bullet = LoadImage("bullet.bmp")
AutoMidHandle True
SeedRnd MilliSecs()
x= 0
y = 0
Type bullet
Field x
Field y
End Type
Type retard
Field x
Field y
End Type
SetBuffer BackBuffer()
Repeat
Cls ; clearing the screen at the begining of each loop
;drawling colin
DrawImage colin,x,y
;moving colin
If KeyDown(203) Then x = x - 5
If KeyDown(205) Then x = x + 5
If KeyDown(200) Then y = y - 5
If KeyDown(208) Then y = y + 5
If KeyHit(57) Then
b.bullet = New bullet
b\x = x - 200
b\y = y - 130
EndIf
For b.bullet = Each bullet
b\y = b\y - 5
DrawImage bullet,b\x,b\y
If b\y < -100 Then Delete b
Next
; ret stuff etc........
If x = x Then r.retard = New retard ; <<<< - X will always equal X - This is going to create a new 'retard' object each frame - totally unnecessary
r\x = 130
r\y = 0
DrawImage ret,r\x,r\y
If ImagesCollide(bullet,b\x,b\y,0,ret,r\x,r\y,0) Then FreeImage ret ;This should be in your bullet for..next loop as b/x and b/y will be undefined at this point
;also if you free the image then you won't be able to draw it again.
Flip
Until KeyDown(1)
|
| ||
Theres this little line here also:If x = x Then r.retard = New retard That will always be true, thus you are constantly creating more instances of the Retard type. I seriously suggest that you re-write everything. It works like a charm sometimes when you do it for the second time. EDIT: I posted the same time as Matty...not a chance. |
| ||
| Now just tell me how when I hit the image with the bullet that the "retard" disappears. I fixed the other stuff I think. :) Thank you so much so far. |
| ||
Had a bit of free time, though this is not from in front of a machine that has blitz installed but try this:
;CONFUSED AKA THE PROGRAM WON'T WORK
Graphics 800,600,0,2 ;you really should specify the graphics mode first.
ret = LoadImage("retard.jpg")
colin = LoadImage ("colin.jpg")
ResizeImage (colin,100,100)
bullet = LoadImage("bullet.bmp")
AutoMidHandle True
SeedRnd MilliSecs()
x= 0
y = 0
Type bullet
Field x
Field y
End Type
Type retard
Field x
Field y
End Type
SetBuffer BackBuffer()
Repeat
Cls ; clearing the screen at the beginning of each loop
;drawling colin
DrawImage colin,x,y
;moving colin
If KeyDown(203) Then x = x - 5
If KeyDown(205) Then x = x + 5
If KeyDown(200) Then y = y - 5
If KeyDown(208) Then y = y + 5
If KeyHit(57) Then
b.bullet = New bullet
b\x = x - 200
b\y = y - 130
EndIf
;i put this in for a bit of fun...
if (millisecs()>time) then
time=millisecs()+Rand(500,2000)
r.retard=new retard
r\x = rand(0,graphicswidth())
r\y = rand(0,graphicsheight()/2)
endif
For b.bullet = Each bullet
b\y = b\y - 5
DrawImage bullet,b\x,b\y
For r.retard = each retard
If ImagesCollide(bullet,b\x,b\y,0,ret,r\x,r\y,0) then
delete r
endif
next
If b\y < -100 Then Delete b
Next
For r.retard = each retard
drawimage ret,r\x,r\y
next
vwait
Flip false
Until KeyDown(1)
|
| ||
| Matty thank you very much problem solved!( I liked the extra stuff too :p ) Thanks also to everyone else who posted! I'm a noob lol. |
| ||
| Depends, if you don't study Matty's version then you are really a noob :D |
| ||
| "FreeImage retard" Heh.. wasn't calling you a retard btw. |
| ||
| Hehe :) classic.. |