WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

 
 
Thread Tools Rate Thread Display Modes
Prev Previous Post   Next Post Next
  #8  
Old 02-24-2006, 01:28 PM
betancourtb82 betancourtb82 is offline
Member
 
Join Date: Jan 2006
Posts: 103
bullets

I'm using a variation of this duckcourt example, except I increased the speed and shrunk the ball so it looks like a bullet. Unfortunately the crosshair is not too accurate. I don't need pinpoint accuracy, but I would like the "bullet" to "shoot" from the middle of the crosshair. Sometimes when I shoot to the left or right, the bullet comes out from the left or right of the crosshair. I can't think of anyway to adjust this so the bullet comes out from the crosshair no matter what direction I'm shooting. Here is the code for your reference:
Code:
def MoveBullet(bullet,elapsed):
	hitObject = 0
	
	#check if bullet is colliding with an object
	for object in collidables:
		
		#perform the collision check with the object
		info = bullet.collidingwith(object,1)
		if info.intersected:
			#set the bullets new vector to the reflection vector
			bullet.vector = viz.Vector(vizmat.ReflectionVector(bullet.vector,info.normalVector))
			
			#create a vector of the normal of the collision
			normal = viz.Vector(info.normalVector)
			
			#Check dot product of velocity and normal
			if bullet.vector * normal <0:
				bullet.vector*= -1
				
			#calculate the rotation vector of the ball
			bullet.rotvector = bullet.vector * rotRight
						
			#if object.isTarget and ball.lastHit != object:
				
			hitObject = object
			
			#play ball bounce sound
			viz.playsound('bounce.wav')
			
			break
	#get the bullet's current position
	pos = bullet.get(viz.POSITION)
	
	#calculate the balls future position based on it's velocity
	futurePos = pos + (bullet.vector * elapsed)
	bullet.translate(futurePos.get())
	
	#rotate the bullet along it's rotation vector
	#bullet.rotate(bullet.rotvector[0],bullet.rotvector[1],ball.rotvector[2],90*elapsed,viz.RELATIVE_WORLD)
	
	#Update the bullet's shadow
	bullet.shadow.translate(futurePos.x,0,futurePos.z)	
			
def mytimer(num):
	
	if num == ANIMATION:
		
		#Calculate elapsed time since last update
		elapsed = viz.elapsed()
		
		#Update each active ball
		for bullet in bullets:
			if bullet.active:
				#Move the ball and check if it has collided with any objects
				MoveBullet(bullet,elapsed)
		
		#Update the crosshair position
		crosshair.translate(viz.mousepos()+[0])
		
	elif num == START_AVATAR:
		global nextAvatar
		#Get the next available duck and start it
		avatar = avatars[nextAvatar]
		walkAvatar(avatar)
		nextAvatar = (nextAvatar + 1) % NUM_AVATARS
		viz.starttimer(START_AVATAR,TIME_BETWEEN_AVATARS)

#Shoot a ball whenever left mousebutton is clicked
vizact.onmousedown(viz.MOUSEBUTTON_LEFT,shootBullet)

#Create callbacks for timer events
viz.callback(viz.TIMER_EVENT,mytimer)

##Start a timer which starts the next available duck
viz.starttimer(START_AVATAR,0.1)

#Start the animation timer, which animates the ball and checks for collisions
viz.starttimer(ANIMATION,0.01,-1)
Reply With Quote
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 06:44 PM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC