WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

Reply
 
Thread Tools Rate Thread Display Modes
  #1  
Old 11-13-2013, 10:31 PM
saajaja saajaja is offline
Member
 
Join Date: Nov 2011
Posts: 14
Dear Frank,

I spoke too soon. Your code helped speed me in the right direction, but it had a semantic bug. Execution would continue before the actual input value was received. So if we wanted to actually do anything with the input string, we would end up doing weird stuff that we didn't want to do.

In order to make the program wait for an actual input to arrive from the user, I did some fancy signal stuff based on your code and the two balls example at the bottom of Task Basics.

Code:
import viz
import vizinput
import viztask

class test:
	def __init__(self):
		piazza = viz.add('piazza.osgb')
		
		self.input = 'initialized value'
		vizact.onkeydown(' ', self.getAndPrintInput)
		self.gotInputSignal = viztask.Signal()
		
		viz.go()

	def getInput(self):
		# Blindfold.
		viz.fogcolor(viz.GRAY)
		viz.fog(.2)
		yield viztask.waitFrame(1)
		
		# Ask for input
		self.input = vizinput.input('Input something.')
		self.gotInputSignal.send()
		
		# Unblindfold.
		viz.fog(0)
		yield viztask.waitFrame(1)
	
	def printInput(self):
		# Wait for an actual input to arrive.
		yield self.gotInputSignal.wait()
		print self.input
	
	def getAndPrintInput(self):
		viztask.schedule( self.getInput() )
		viztask.schedule( self.printInput() )

t = test()
I learned a lot today. Thank you for your support!
Reply With Quote
  #2  
Old 11-14-2013, 05:18 AM
Frank Verberne Frank Verberne is offline
Member
 
Join Date: Mar 2008
Location: Netherlands
Posts: 148
Hi Saajaja,

Seems like you already figured out how to solve your problem. However, a simpler solution seems like to yield a function, where you do something with the input. Everything that is in that function should be executed before showing the world again. Now, I just print the input and wait a few seconds, so you can see that everything in the function is executed before executing the rest of the code.
Code:
import viz
import vizinput
import vizact
import viztask

piazza = viz.add('piazza.osgb')
viz.go()

def printValue(value):
	print value
	viz.waitTime(4)
	
def getInput():
	# Blindfold.
	viz.MainScene.visible(0,viz.WORLD)
	viz.clearcolor(viz.SKYBLUE)
	yield viztask.waitFrame(1)
	
	# Ask for input
	input = ''
	while input == '':
		input = vizinput.input('Input something.')
	
	yield printValue(input)
	# Unblindfold.
	viz.MainScene.visible(1,viz.WORLD)
	viz.clearcolor(viz.BLACK)
	yield viztask.waitFrame(1)

def inputScreen():
	viztask.schedule(getInput)
	
vizact.onkeydown(' ', inputScreen)
Reply With Quote
  #3  
Old 11-14-2013, 09:08 AM
saajaja saajaja is offline
Member
 
Join Date: Nov 2011
Posts: 14
That's much better! Thank you very much, Frank.
Reply With Quote
Reply

Thread Tools
Display Modes Rate This Thread
Rate This Thread:

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

Similar Threads
Thread Thread Starter Forum Replies Last Post
Screen Size and Scaling javadi Vizard 2 04-02-2013 06:56 PM
Pygame Screen within Vizard World VirtuallyInsane Vizard 4 02-18-2013 10:50 AM
Attach a TexQuad to pit.osgb screen Ducky Vizard 1 01-17-2013 03:57 PM
split screen honey006 Vizard 3 05-21-2009 10:57 AM
position of html-file on screen active_world Vizard 1 05-16-2008 08:24 PM


All times are GMT -7. The time now is 11:43 AM.


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