Projectile follow direction mouse

This commit is contained in:
grisel-davy 2020-04-12 00:08:24 -04:00
parent dd103744d6
commit defd4946d9
3 changed files with 31 additions and 24 deletions

View file

@ -25,9 +25,9 @@
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="3.959798" inkscape:zoom="5.6"
inkscape:cx="-1038.4591" inkscape:cx="-978.35637"
inkscape:cy="251.12477" inkscape:cy="195.0211"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:current-layer="layer1" inkscape:current-layer="layer1"
showgrid="true" showgrid="true"
@ -57,6 +57,13 @@
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer" inkscape:groupmode="layer"
id="layer1"> id="layer1">
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.38599998;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect907"
width="114.71026"
height="84.800301"
x="-297.65625"
y="212.33334" />
<rect <rect
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.04628637;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.04628637;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect815" id="rect815"
@ -721,17 +728,18 @@
id="rect101" id="rect101"
width="2.6458335" width="2.6458335"
height="3.9687505" height="3.9687505"
x="-277.8125" x="221.85834"
y="221.59375" y="274.90207"
inkscape:export-xdpi="32.161598" inkscape:export-xdpi="133.33333"
inkscape:export-ydpi="32.161598" /> inkscape:export-ydpi="133.33333"
transform="rotate(90)" />
<path <path
style="fill:#333333;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="fill:#333333;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M -277.28333,221.59375 V 220.8 c 0,0 0.51485,0.26458 0.79375,0.26458 0.27889,0 0.79375,-0.26458 0.79375,-0.26458 v 0.79375 h -1.5875" d="m -274.90208,222.3875 h 0.79375 c 0,0 -0.26458,0.51485 -0.26458,0.79375 0,0.27889 0.26458,0.79375 0.26458,0.79375 h -0.79375 v -1.5875"
id="path103" id="path103"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
sodipodi:nodetypes="ccsccc" sodipodi:nodetypes="ccsccc"
inkscape:export-xdpi="32.161598" inkscape:export-xdpi="133.33333"
inkscape:export-ydpi="32.161598" /> inkscape:export-ydpi="133.33333" />
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View file

@ -21,7 +21,7 @@ WHITE=(255,255,255)
BLUE=(0,0,255) BLUE=(0,0,255)
RED=(255,0,0) RED=(255,0,0)
perso = Perso('Alice',200,200,pygame.K_z,pygame.K_s,pygame.K_q,pygame.K_d,pygame.K_SPACE,'perso1','canon.png','projectile1') perso = Perso('Alice',200,200,pygame.K_z,pygame.K_s,pygame.K_q,pygame.K_d,pygame.K_SPACE,'perso1','canon.png','projectile1_right.png')
clock = pygame.time.Clock() clock = pygame.time.Clock()
@ -41,5 +41,5 @@ while not done:
pygame.display.flip() pygame.display.flip()
clock.tick(30) clock.tick(60)

View file

@ -7,7 +7,7 @@ import pygame
from time import time from time import time
import numpy as np import numpy as np
from numpy import sqrt from numpy import sqrt
from math import atan, degrees from math import atan, degrees,radians, cos, sin
decision_matrix = np.array([[0,1,2],[3,4,5],[6,7,8]]) decision_matrix = np.array([[0,1,2],[3,4,5],[6,7,8]])
suffix_matrix = ['_up_left.png', suffix_matrix = ['_up_left.png',
@ -48,6 +48,7 @@ class Perso():
pygame.image.load(img_path+texture+'_down_right.png').convert_alpha(),] pygame.image.load(img_path+texture+'_down_right.png').convert_alpha(),]
self.img = self.imgs[0] self.img = self.imgs[0]
self.canon = pygame.image.load(img_path+texture_canon).convert_alpha() self.canon = pygame.image.load(img_path+texture_canon).convert_alpha()
self.degres = 0
self.texture_proj = texture_proj self.texture_proj = texture_proj
self.size = self.img.get_size() self.size = self.img.get_size()
@ -129,13 +130,13 @@ class Perso():
x_mouse, y_mouse = pygame.mouse.get_pos() x_mouse, y_mouse = pygame.mouse.get_pos()
if x_mouse==self.posx: if x_mouse==self.posx:
x_mouse+=0.1 x_mouse+=0.1
degres = degrees(abs(atan((y_mouse-self.posy)/(x_mouse-self.posx)))) self.degres = degrees(abs(atan((y_mouse-self.posy)/(x_mouse-self.posx))))
if y_mouse > self.posy: if y_mouse > self.posy:
degres = -degres self.degres = -self.degres
if x_mouse < self.posx: if x_mouse < self.posx:
degres = 180-degres self.degres = 180-self.degres
canon = pygame.transform.rotate(self.canon,degres) canon = pygame.transform.rotate(self.canon,self.degres)
# Get rects # Get rects
perso_rect = self.img.get_rect() perso_rect = self.img.get_rect()
@ -146,7 +147,7 @@ class Perso():
def fire(self,name,texture): def fire(self,name,texture):
if (time()-self.last_fire> 0.2): if (time()-self.last_fire> 0.2):
new_proj = Projectile(name,self.texture_proj,3,(self.posx+int(self.img.get_height()/2),self.posy+int(self.img.get_width()/2)),[self.direction[0],self.direction[1]]) new_proj = Projectile(name,self.texture_proj,10,(self.posx+int(self.img.get_height()/2),self.posy+int(self.img.get_width()/2)),self.degres)
self.projectiles.append(new_proj) self.projectiles.append(new_proj)
self.last_fire = time() self.last_fire = time()
@ -154,17 +155,15 @@ class Perso():
class Projectile(): class Projectile():
def __init__(self,name,texture,speed,position,direction): def __init__(self,name,texture,speed,position,angle):
self.name = name self.name = name
self.speed = speed self.speed = speed
self.position = position self.position = position
self.direction = direction self.direction = direction = [cos(radians(angle)),-sin(radians(angle))]
self.img = pygame.transform.rotate(pygame.image.load(img_path+texture).convert_alpha(),angle)
index = decision_matrix[self.direction[1]+1,self.direction[0]+1]
self.img = pygame.image.load(img_path+texture+suffix_matrix[index]).convert_alpha()
def move(self): def move(self):
self.position = (self.position[0]+self.speed*self.direction[0],self.position[1]+self.speed*self.direction[1]) self.position = (int(self.position[0]+self.speed*self.direction[0]),int(self.position[1]+self.speed*self.direction[1]))
def draw(self,surface): def draw(self,surface):
surface.blit(self.img,self.position) surface.blit(self.img,self.position)