Last active
August 18, 2020 18:56
-
-
Save jsbain/7a1a3c1b0d28c752cba8f5420255dfe6 to your computer and use it in GitHub Desktop.
mapscene.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from scene import * | |
import sound | |
import random | |
import math | |
A = Action | |
mapsprites=['plc:Brown_Block','plc:Dirt_Block','plc:Grass_Block','plc:Plain_Block',] | |
def choose_random_node(): | |
tx=random.choice(mapsprites) | |
sn=SpriteNode(tx) | |
return sn | |
class MapNode(Node): | |
def __init__(self, size): | |
'''create a map, randomly filled with sprites | |
size is tuple containg row,col number of tiles''' | |
self.map=[[choose_random_node() for i in range(size[1])] for j in range(size[0])] | |
r=0 | |
for row in self.map: | |
r+=1 | |
c=0 | |
for col in row: | |
c+=1 | |
col.position=(c*col.size.width, r*(row[0].size.height-40)) | |
col.z_position=-r | |
self.add_child(col) | |
self.player=SpriteNode('plc:Character_Boy') | |
self.size=self.bbox | |
self.player.position=40*10,40*10 | |
self.add_child(self.player) | |
self.scale=1.2 | |
class MyScene (Scene): | |
def setup(self): | |
self.mapnode=MapNode([30,40]) | |
self.add_child(self.mapnode) | |
self.size=self.bbox | |
self.zoom_in=SpriteNode('iob:arrow_expand_32') | |
self.zoom_in.position=64,64 | |
self.zoom_in.scale=2 | |
self.zoom_out=SpriteNode('iob:arrow_shrink_32') | |
self.zoom_out.position=2*64,64 | |
self.zoom_out.scale=2 | |
self.add_child(self.zoom_in) | |
self.add_child(self.zoom_out) | |
ln=LabelNode('tap edges to walk. drag map to move map') | |
ln.anchor_point=.5,1 | |
ln.position=get_screen_size()[0]/2, get_screen_size()[1] | |
self.add_child(ln) | |
def did_change_size(self): | |
pass | |
def update(self): | |
pass | |
def touch_began(self, touch): | |
'''simple screen edge joystick | |
tap near edge to move character one square | |
''' | |
self.dragging=False | |
player=self.mapnode.player | |
dp=player.size | |
dt=.1 | |
if touch.location in self.zoom_in.bbox: | |
self.mapnode.scale=self.mapnode.scale*1.2 | |
return | |
if touch.location in self.zoom_out.bbox: | |
self.mapnode.scale=self.mapnode.scale/1.2 | |
return | |
if touch.location.x>0.9*self.size.width: | |
player.run_action(Action.move_by(dp.x,0,dt,TIMING_EASE_IN)) | |
sound.play_effect('rpg:Footstep08') | |
elif touch.location.x<0.1*self.size.width: | |
player.run_action(Action.move_by(-dp.x,0, dt,TIMING_EASE_IN)) | |
sound.play_effect('rpg:Footstep07') | |
elif touch.location.y>0.9*self.size.height: | |
player.run_action(Action.move_by(0,dp.y/2,dt,TIMING_EASE_IN)) | |
sound.play_effect('rpg:Footstep02') | |
elif touch.location.y<0.1*self.size.height: | |
player.run_action(Action.move_by(0,-dp.y/2,dt,TIMING_EASE_IN)) | |
sound.play_effect('rpg:Footstep04') | |
else: | |
self.dragging=True | |
def touch_moved(self, touch): | |
'''simple scrollview type action''' | |
if self.dragging: | |
dp=touch.location-touch.prev_location | |
#self.mapnode.run_action(Action.move_by(dp.x,dp.y,0)) | |
self.mapnode.position+=dp | |
self.touch_time=self.t | |
def touch_ended(self, touch): | |
self.dragging=False | |
if __name__ == '__main__': | |
s=MyScene() | |
run(s, show_fps=True) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment