Sprite movement (edge-lock side scrolling) problem

Discuss how to use the Ren'Py engine to create visual novels and story-based games. New releases are announced in this section.
Forum rules
This is the right place for Ren'Py help. Please ask one question per thread, use a descriptive subject like 'NotFound error in option.rpy' , and include all the relevant information - especially any relevant code and traceback messages. Use the code tag to format scripts.
Post Reply
Message
Author
yumepeh
Newbie
Posts: 4
Joined: Tue Jan 02, 2018 12:05 pm
Tumblr: yumepeh
Contact:

Sprite movement (edge-lock side scrolling) problem

#1 Post by yumepeh »

Hi everyone, I'm making a side-scroller with spritemanager. This sprite can move from the edge to mid-edge of the screen, then will travel at 0 speed (the background scrolls instead) from mid-end until the other mid-end side. Overall, it's working well but problems arise when the player presses left and right in a speedy manner. Its midpoint would slowly move from where its supposed to be; or as the sprite comes back from its 0 speed area, its movable state comes delayed.

Engine:

Code: Select all

def engine_updater(st):
 	if store.time_counter:
 		store.time_counter -= .001
        if store.time_counter <= 0.0:
                store.time_counter = None
                store.player_sprites.append(Character_Sprite())
	if g_s:
		if store.control_flags:
                	for sprite in g_s[:]:
                    		sprite.update()
                    		sprite.movement()
        return .001

def engine_event(ev, x, y, st):
	if ev.type == KEYDOWN and ev.key in BUTTONS:
            pressed = pygame.key.get_pressed()
            if pressed[l_arrow] and not l_arrow in store.control_flags:
                store.control_flags.append(l_arrow)
                store.spriteFlip = True
            elif pressed[r_arrow] and not r_arrow in store.control_flags:
                store.control_flags.append(r_arrow)
                store.spriteFlip = False

        if ev.type == KEYUP and ev.key in BUTTONS:
            if ev.key in store.control_flags:
                store.control_flags.remove(ev.key)
        
in class Character_Sprite:

Code: Select all

        def movement(self):
            if store.control_flags:
                if l_arrow in store.control_flags:
                    self.dist -= self.move_amt
                    if self.dist > -175 or self.dist < -2993:
                        self.x -= self.move_amt
                        store.charCentered = False
                    else:
                        self.x -= 0
                        store.charCentered = True

                elif r_arrow in store.control_flags:
                    self.dist += self.move_amt
                    if self.dist > -175 or self.dist < -2993:
                        self.x += self.move_amt
                        store.charCentered = False
                    else:
                        self.x += 0 
                        store.charCentered = True
        def update(self):
        	if self.delay_frames > 0:
                	self.delay_frames -= 1
                	return
           	self.delay_frames = self.max_delay
            	self.frame_number += 1
            	if self.frame_number >= self.max_frames:
                	self.frame_number = 0
                	
            	self.refresh_sprite()

        def refresh_sprite(self):
            	self.tx, self.ty, self.tz = self.show.x, self.show.y, self.show.zorder
            	self.show.destroy()
	        	self.sprite = self.frame_list[self.frame_number]
        	if spriteFlip == True:
                	self.sprite = im.Flip(self.sprite,True,False)

	        self.show = MNG.create(self.sprite)
        	self.show.x, self.show.y, self.show.zorder = self.tx, self.ty, self.tz                     
I suspect that something's causing the dist count to be interrupted/delayed; probably the timer count? Or something else? I can't seem to find what's causing the problem; and have no idea how to fix it.
Attachments
Screen-Recording-_5-27-2020-12-03-08-PM_.gif

Post Reply

Who is online

Users browsing this forum: Milkymalk, MisterPinetree