omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    The programing to stop(cancel) Action.repeat in the middle of it.

    Pythonista
    action.repeat stop cancel scene
    2
    3
    1035
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • kyorokarasu
      kyorokarasu last edited by ccc

      I'm making a sound pitch study app.

      To repeat the program I used 'while and break' statement at first, but it didn't work in the 'scene'.
      So I'm trying to use 'Action.repeat()' to repeat program. It works very fine.
      And now I want to stop (cancel) the repeat and go back to 'setup(self)' or 'new_play(self)' screen when I touch 'stop_icon' SpriteNode automatically in the middle of the repeat program (when I don't want to repeat them10times (in my program below)).

      Please help me achieve it.

      from scene import *
      import sound
      from random import randint
      #A = Action
      
      class MyScene (Scene):
      	def setup(self):
      		self.background_color='#0000ff'
      		ground=Node(parent=self)
      				
      		icons=['iob:ios7_play_32','iob:ios7_pause_32']
      		
      		self.start_icon=SpriteNode(icons[0],position=(self.size.w/2,150))
      		self.start_icon.size*=3		
      
      		self.stop_icon=SpriteNode(icons[1],position=(self.size.w/2,150))
      		self.stop_icon.size*=3
      		
      		self.pmi=self.start_icon
      		self.add_child(self.pmi)
      		self.play_mode=False
      	
      	def did_change_size(self):
      		pass	
      
      		
      	def sound_list(self):
      		num=randint(0,12)
      						
      		sl=['piano:C4','piano:C#4','piano:D4','piano:D#4','piano:E4','piano:F4','piano:F#4','piano:G4','piano:G#4','piano:A4,'piano:A#4','piano:B4','piano:C5']
      	
      		self.player=sound.Player(sl[num])
      		self.player.play()
      		
      	def new_play(self):
      		self.pmi.remove_from_parent()
      		self.pmi=self.start_icon
      		self.add_child(self.pmi)
      		self.play_mode=False
      		
      	def update(self):	# I don't want to use this update() function.
      		pass
      				
      	def touch_began(self, touch):
      		if self.play_mode==False:
      			if touch.location in self.pmi.frame:
      				self.pmi.remove_from_parent()
      				self.pmi=self.stop_icon
      				self.add_child(self.pmi)
      				self.play_mode=True
      				sq_1=Action.sequence(Action.call(self.sound_list),Action.wait(2.0))	# And more actions continue actually.
      				
      				rp_num=10	# I want to stop Action.repeat(sounds) when I touch 'stop_icon', when I don't want to repeat 10times in this case.
      				rp=Action.repeat(sq_1,rp_num)
      				
      				sq_2=Action.sequence(rp,Action.call(self.new_play))
      				
      				self.run_action(sq_2)
      
      	
      		elif self.play_mode==True:	# I want to stop Action.repeat(sounds) when I touch 'stop_icon'(self.pmi), when I don't want to repeat 10times in this case.
      			if touch.location in self.pmi.frame:
      				self.pmi.remove_from_parent()
      				self.pmi=self.start_icon
      				self.add_child(self.pmi)
      				self.play_mode=False
      				
      	def touch_moved(self, touch):
      		pass
      	
      	def touch_ended(self, touch):
      		pass
      		
      if __name__ == '__main__':
      	run(MyScene(), show_fps=False)
      
      1 Reply Last reply Reply Quote 0
      • JonB
        JonB last edited by

        From docs of Action:

        Once an action has been added to a Node, it cannot be changed anymore, but you can remove it (and stop the animation) using Node.remove_action() or Node.remove_all_actions().

        So, try self.remove_all_actions()

        1 Reply Last reply Reply Quote 0
        • kyorokarasu
          kyorokarasu last edited by

          It worked!!
          I could stop Action.repeat().
          Thank you so much!!

          1 Reply Last reply Reply Quote 0
          • First post
            Last post
          Powered by NodeBB Forums | Contributors